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