我有一个创建 pthread 的主函数。我正在尝试使用信号量在有选择的时间打印一个全局变量(注意-mutex、s1、s2 和 memoryUsed 都全局声明):
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 的信号。它立即打印其全局变量的值。如果我注释掉 pthread 中的信号,程序就不会死锁。你能像这样在主线程和 pthread 之间使用信号量吗?