【发布时间】:2012-02-21 05:07:58
【问题描述】:
你好!!
我有一个在 linux 中运行的 c ap,它是一个 POSIX 多线程应用程序, 在线程 1 中,我以这种方式设置全局变量:
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
Data1[idx].doubleval = idx * 100.0 * anothervar ;
}//for
Pthread_mutex_unlock(&Mutex1);
在 thread2 中,我以这种方式获取全局变量:
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
doublexxx = Data1[idx].doubleval ;
DoSomething(doublexxx) ;
}//for
Pthread_mutex_unlock(&Mutex1);
现在,假设我不想在我的 ap 中使用 Mutex,如果 thread1 正在设置 Data1[33].doubleval 而 thread2 正在读取 Data1[33].doubleval ,那么 Data1[33].doubleval 会很奇怪吗价值 ?我的意思是,例如,double var 有 4 个字节,而 thread1 正在设置 Data1[33].doubleval 前 2 个字节,而不是完成后 2 个字节,此时 thread2 正在尝试读取 Data1[33].doubleval ....可能吗?
如果可能的话,我该如何保护双变量而不会出现这种问题? 互斥锁很好用,我只是想知道是否有另一种方法来保护双变量 哪个 thread1 正在其中写入,至少 thread2 尝试从同一个 var 中读取 将等待 4 个字节的 double var 完成!!!
【问题讨论】:
-
只需使用互斥体,您就不必担心。为什么要不择手段地制造不必要的问题?
-
说真的;如果您不想锁定,那么您不应该使用线程。
-
谢谢,我的应用程序使用了太多线程,我想尽快运行,我不知道 mutex_lock 效果如何,实际上所有互斥锁都使用在一个小的内存 strcpy 块中,但我仍然被告知要让它运行得更快....谢谢大家的热情回复!
标签: c multithreading gcc mutex