C++ 同时从2个线程读取全局变量

C++ 同时从2个线程读取全局变量,c++,c,multithreading,thread-safety,mutex,C++,C,Multithreading,Thread Safety,Mutex,我的程序有两个线程和一个整数全局变量。假设全局变量在thread2开始执行之前已初始化为某个值。两个线程都在读取该变量。有可能的比赛条件吗 在我的程序中,这些函数从两个线程同时重复执行 void thread1(int iParam) { if ( gi_Varable == iParam ) //do something } void thread2(int iParam) { if ( gi_Varable == iParam) //do somet

我的程序有两个线程和一个整数全局变量。假设全局变量在thread2开始执行之前已初始化为某个值。两个线程都在读取该变量。有可能的比赛条件吗

在我的程序中,这些函数从两个线程同时重复执行

void thread1(int iParam)
{
    if ( gi_Varable == iParam )
    //do something
}

void thread2(int iParam)
{
    if ( gi_Varable == iParam)
        //do something

}

同时访问和尝试操作相同的数据是争用条件。这里两个线程只是从全局变量中读取数据,而不是试图操作它,因此不存在争用条件。

如果您询问POSIX线程,则:

线程调用
pthread\u create
也可以在新线程启动时看到“()


因此,在这种情况下不可能存在竞争条件。

这两个线程只获取数据,它们不会相互竞争

仍然可能存在序列化问题,即何时设置全局变量?如果在创建线程之前,没有问题

如果全局变量可以在创建线程时发生变化,那么您可能需要序列化改变全局变量的线程和代码。这确实取决于应用程序的细节,您只需要考虑可能性。


如果一个线程正在改变变量,尤其是另一个线程正在调度依赖于全局VAR设置为特定值的新线程。现在,

< P> C和C++现在都使用线程安全的方法。如果两个操作应该彼此相对地排序,而不是。 在这种情况下,写操作在线程创建之前,线程创建在读操作之前。这意味着写操作发生在读操作之前。没问题


读取之间没有顺序要求。所以这也没有问题。

是的,全局变量是线程之间共享的,但是如果
gi_Varable
被某个线程修改,那么您似乎不知道在使用全局变量时何时存在争用条件和错误。以及如何通过添加并发控制机制。@skallsp即使有两个进程,也不需要同步。如果我错了,请纠正我。很抱歉,由于我没有处理两个进程之间共享内存的经验,因此无法对此进行评论。@OlofForshell我在回答中包含了这一点,即从全局va读取
riable不尝试操作它