【发布时间】:2019-06-15 16:31:10
【问题描述】:
我有一个学校项目,需要我编写一个程序来打印:<ONE><TWO><THREE><ONE><TWO><THREE><ONE><TWO><THREE>….............. 使用 3 个线程和互斥锁。我试图在课堂上的一些帮助下做到这一点,但它只是继续打印<ONE>。你能帮我解决我的问题并理解我有什么问题吗?
#include <pthread.h>
#include <stdio.h>
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *func(void *arg)
{
pthread_mutex_lock(&mutex);
while (1) {
printf ("<ONE>");
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *func2(void *arg)
{
pthread_mutex_lock(&mutex);
while (1) {
printf ("<TWO>");
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *func3(void *arg)
{
pthread_mutex_lock(&mutex);
while (1) {
printf ("<THREE>");
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
main()
{
pthread_t mythread1,mythread2,mythread3;
pthread_create( &mythread1, NULL, func, (void *) 1);
pthread_create( &mythread2, NULL, func2, (void *) 2);
pthread_create( &mythread3, NULL, func3, (void *) 3);
pthread_join ( mythread1, NULL);
pthread_join ( mythread2, NULL);
pthread_join ( mythread3, NULL);
exit(0);
}
【问题讨论】:
-
您希望循环
while(1) { printf("<ONE>"); }何时停止? -
你只能使用一个互斥锁吗?
-
@klutt 问题在于它不会停止。我希望它停止,然后是
,然后是 ,然后再重复一遍。我做错了什么, 循环永远不会停止。我必须使用多少互斥锁没有限制。只是因为我不熟悉他们我用了一个 -
是的,我只是指出一个明显的事实,即由于您从未解锁互斥锁,它将陷入无限循环。您必须在循环内锁定和解锁它。
-
@klutt 好的。现在它只是随机打印
或 。不是我想要的顺序
标签: c multithreading pthreads mutex thread-synchronization