阻塞线程,直到某段代码在C中完成执行

时间:2015-05-22 10:53:13

标签: c windows multithreading

在我的C程序中,我有2个线程,两个都在开始时启动。我有一个全局变量(一些句柄),并在Thread1函数中进行了修改。 Thread2函数也使用该全局变量。我想确保在Thread1完成更新变量后,Thread2函数应该使用该变量。

我想在thread1更新全局变量的值时阻塞thread2。

如何实现上述逻辑?

2 个答案:

答案 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);
    }