【发布时间】:2016-05-19 21:54:42
【问题描述】:
我正在使用 pthreads 在父进程旁边创建一个子进程。我正在尝试使用互斥锁在子进程中的第一个打印语句后停止,并在父进程中的第二个打印语句后恢复:
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *print(void *attr)
{
printf("I am the child process\n");
pthread_mutex_lock(&lock);
pthread_cond_wait(&cond, &lock);
printf("The child process is done\n");
pthread_mutex_unlock(&lock);
return 0;
}
int main()
{
pthread_t child;
pthread_mutex_lock(&lock);
printf("I am the parent process\n");
pthread_create(&child, NULL, print, NULL);
pthread_join(child, NULL);
printf("The parent process is done\n");
pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond);
return 0;
}
原输出如下:
I am the parent process
I am the child process
The child process is done
The parent process is done
我要找的输出如下:
I am the parent process
I am the child process
The parent process is done
The child process is done
我一生都无法弄清楚如何使用互斥锁来实现这一点,我最接近的方法是让它在无限期挂起之前达到前两个语句。我也有原始输出,好像互斥语句什么都不做。
谁能帮我解决这个问题?提前致谢。
【问题讨论】:
-
父级锁定互斥体并在连接中等待,子级在锁定的互斥体上等待。这怎么不是死锁?
-
我尝试了许多其他方法,但它们都以挂起或输出没有变化而告终,这只是我接近它的方法之一。我能做些什么来避免僵局?遇到这些问题我做错了什么?
-
在整个讨论中使用词线不合适吗?