#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
#define WORK_SIZE 1024
pthread_mutex_t work_mutex;
char work_area[WORK_SIZE];
void *thread_start(void *);
int main() {
pthread_t a_thread;
pthread_mutex_init(&work_mutex,NULL);
pthread_create(&a_thread,NULL,thread_start,NULL);
while(1)
{
pthread_mutex_lock(&work_mutex);
printf("Enter some text\n");
fgets(work_area, WORK_SIZE, stdin);
pthread_mutex_unlock(&work_mutex);
}
return 0;
}
void *thread_start(void *arg)
{
sleep(1);
while(1)
{
pthread_mutex_lock(&work_mutex);
printf("You enetered %d char",strlen(work_area));
pthread_mutex_unlock(&work_mutex);
}
}
当我执行程序时,在释放主线程中的互斥锁之后,它每次在第二个线程获得锁之前都会再次获得锁。我期待一旦主线程释放锁,已经被阻塞的第二个线程将获得锁,并在主线之前开始执行。使用互斥锁实现生产者/消费者
更清楚,我得到这样的输出类型: -
Enter some text
qwerty
Enter some text
asdaf
Enter some text
jkdf
Enter some text
pthread_yield就是我正在寻找的东西。 程序现在运行得非常好。 非常感谢。 – Ashish 2010-07-09 14:23:24