1
我有一个创建pthread的主函数。我试图用信号量在选定的时间打印一个全局变量(注意:互斥体,S1,S2,以及memoryUsed所有全局声明):如何阻止pthread从main打印全局变量,然后继续pthread?
int main(int argc, const char * argv[])
{
pthread_mutex_init(&mutex, NULL);
sem_init(&s1, 0, 0);
sem_init(&s2, 0, 0);
pthread_t t0;
pthread_create(&t0, NULL, &matrix_management, NULL);
sem_wait(&s1); // wait for signal from pthread
printf("Memory Usage from main: %d bytes\n\n", memoryUsed); // global var
sem_post(&s2); // signal pthread to continue
pthread_join(t0, NULL);
sem_destroy(&s1);
sem_destroy(&s2);
pthread_mutex_destroy(&mutex);
return 0;
}
在我的目标函数,我想停止在选定的点并从main打印一个全局变量。请注意,目标函数中的变量已更改。有一次,我打印,我想继续目标函数:
void *matrix_management(void *len)
{
pthread_mutex_lock(&mutex);
// CHANGE GLOBAL VAR
memoryUsed = 1;
sem_post(&s1); // print from main
sem_wait(&s2); // wait for signal
// continue thread...
pthread_mutex_unlock(&mutex);
return NULL;
}
然而,主线程似乎并没有在所有的信号等待从并行线程。它立即打印其全局变量的值。如果我在pthread中注释掉信号,程序不会死锁。你能像这样在MAIN线程和pthread之间使用信号量吗?
这确实是问题。不知道关于OS X.谢谢你的帮助! – whblackburn