繁体   English   中英

在线程中设置全局变量

[英]Setting Global variables in thread

我需要一个字符串作为全局变量。 多个线程可以设置全局变量。 我应该为此寻求互斥吗? 或OS将处理此类操作。 使用互斥锁会影响应用程序性能。

我并不担心行动的顺序。 我害怕数据损坏。 有人可以让我知道这个。

听起来你理解所有的担忧。 如果全局变量可能已损坏,则肯定需要将其锁定在互斥锁中。 这将影响性能,因为根据定义,这部分现在将是同步的。 话虽这么说,您将希望根据需要锁定代码的最小部分,以最大限度地减少调用同步代码的时间。

你的全局变量是什么? 指向字符串缓冲区或缓冲区本身的指针?

在许多体系结构(包括AFAIR 32位x86)上,覆盖单个指针是原子的。

此示例可能有效:

volatile char **global_var;

void set_var(char *str) {
    char *tmp = strdup(str);
    global_var = &tmp;
}

您可以使用线程局部存储
不幸的是,它没有在当前的C99标准中指定,但可能会在C1X中出现。 目前,您可以使用特定于编译器的实现(GCC,ICC和Visual C都有)。

就标准而言,是的,您必须使用互斥锁。 如果不这样做会导致未定义的行为。 实际上,大多数机器架构都没有问题。 C标准(C1x)的未来版本将具有原子类型,如果在这里使用,肯定会使得没有锁定的分配安全(尽管可能使用内部锁定,在缺乏真实原子的破坏的拱门上)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM