0
同步我有以下代码:如何线程(生产者/消费者)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <queue>
using namespace std;
queue<int> myqueue;
pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condition_var = PTHREAD_COND_INITIALIZER;
void *consumer(void*);
void *producer(void*);
#define COUNT_DONE 10
int count = 0;
main()
{
pthread_t thread1, thread2;
pthread_create(&thread2, NULL, &consumer, NULL);
pthread_create(&thread1, NULL, &producer, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Final count: %d\n",count);
system("PAUSE");
return EXIT_SUCCESS;
}
void *consumer(void*)
{
for(;;)
{
// Lock mutex and then wait for signal to relase mutex
printf("consumer mutex lock \n");
pthread_mutex_lock(&count_mutex);
printf("consumer mutex locked\n");
// Wait while functionCount2() operates on count
// mutex unlocked if condition varialbe in functionCount2() signaled.
printf("consumer wait\n");
pthread_cond_wait(&condition_var, &count_mutex);
printf("consumer condition woke up\n");
myqueue.pop();count--;
printf("Counter value consumer: %d\n",count);
printf("consumer mutex unlock\n");
pthread_mutex_unlock(&count_mutex);
if(count >= COUNT_DONE) return(NULL);
}
}
void * producer(void*)
{
for(;;)
{
printf("producer mutex lock\n");
pthread_mutex_lock(&count_mutex);
printf("producer mutex locked\n");
if(count < COUNT_DONE)
{
myqueue.push(1);
count++;
printf("Counter value producer: %d\n",count);
printf("producer signal\n");
pthread_cond_signal(&condition_var);
}
printf("producer mutex unlock\n");
pthread_mutex_unlock(&count_mutex);
if(count >= COUNT_DONE) return(NULL);
Sleep(5000);
}
}
这是例如正常工作时,消费者线程首先需要互斥。但是当生产者线程最初获得互斥量时,我会在队列中始终有一个消费者不能弹出的整数。
我如何让消费者线程,最初获得生产者之前的互斥体。
注:我正在寻找一种比在另一个线程之前启动一个线程更好的方法。
感谢,