我试图为2个线程实现pthread_cond_wait
。我的测试代码试图用两个线程瓶坯以下情形:2线程的pthread_cond_wait
- 线程B等待条件
- 线程A打印“Hello”五次
- 线程A信号线程B
- 线程A等待
- 线程B打印 “再见”
- 线程B信号线程A
- 回路,开始(X5)
到目前为止,代码打印出“Hello”五次然后卡住了。从例子我看似乎我是在正确的轨道上“锁定互斥,等待,得到由另一个线程发出信号,解除互斥体,做的东西,循环”
测试代码:
//Import
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
//global variables
pthread_cond_t condA = PTHREAD_COND_INITIALIZER;
pthread_cond_t condB = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *threadA()
{
int i = 0, rValue, loopNum;
while(i<5)
{
//unlock mutex
rValue = pthread_mutex_unlock(&mutex);
//do stuff
for(loopNum = 1; loopNum <= 5; loopNum++)
printf("Hello %d\n", loopNum);
//signal condition of thread b
rValue = pthread_cond_signal(&condB);
//lock mutex
rValue = pthread_mutex_lock(&mutex);
//wait for turn
while(pthread_cond_wait(&condA, &mutex) != 0)
i++;
}
}
void *threadB()
{
int n = 0, rValue;
while(n<5)
{
//lock mutex
rValue = pthread_mutex_lock(&mutex);
//wait for turn
while(pthread_cond_wait(&condB, &mutex) != 0)
//unlock mutex
rValue = pthread_mutex_unlock(&mutex);
//do stuff
printf("Goodbye");
//signal condition a
rValue = pthread_cond_signal(&condA);
n++;
}
}
int main(int argc, char *argv[])
{
//create our threads
pthread_t a, b;
pthread_create(&a, NULL, threadA, NULL);
pthread_create(&b, NULL, threadB, NULL);
pthread_join(a, NULL);
pthread_join(b,NULL);
}
一个指针在正确的方向将不胜感激,谢谢! (在Linux上使用“gcc timeTest.c -o timeTest -lpthread”编译的代码)
不,这是不需要的,我主要是尝试变化,但正如你所说,这将是理想的只使用一个 –