在我的C程序中,我有2个线程,两个都在开始时启动。我有一个全局变量(一些句柄),并在Thread1函数中进行了修改。 Thread2函数也使用该全局变量。我想确保在Thread1完成更新变量后,Thread2函数应该使用该变量。
我想在thread1更新全局变量的值时阻塞thread2。
如何实现上述逻辑?
答案 0 :(得分:3)
如果您正在使用pthread
库,则可以使用互斥锁阻止对其他线程的变量访问,直到您将其释放为止。
您可能需要查看此StackOverflow post 或者example
顺便说一下,一些代码可以更好地识别你想要做的事情。
答案 1 :(得分:0)
如果此处的目标是线程1和线程2并行运行但同步,那么使用类似于使用信号量的示例(windows示例):
int count;
/* thread 1 */
for(count = 0; count < 20; count++){
/* allow thread 2 to use count */
ReleaseSemaphore(semaphore2, 1, NULL);
/* ... use count here */
/* wait before count++ */
WaitForSingleObject(semaphore1, INFINITE);
}
/* thread 2 */
int done = 0;
while(!done){
/* wait for count to be updated */
WaitForSingleObject(semaphore2, INFINITE);
/* ... use count here */
done = count < 19 ? 0 : 1;
/* allow thread 1 to update count */
ReleaseSemaphore(semaphore1, 1, NULL);
}