线程1打印A、线程2打印B、线程3打印C,依次打印十遍(ABCABCABC…)
#include【三个线程按顺序打印ABC】#include
#include
#include
#include
#includesem_t sem[3];
void* task1(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[0]);
printf("A\n");
sleep(1);
sem_post(&sem[1]);
}
sem_destroy(&sem[0]);
pthread_exit(NULL);
}void* task2(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[1]);
printf("B\n");
sleep(1);
sem_post(&sem[2]);
}
sem_destroy(&sem[1]);
pthread_exit(NULL);
}void* task3(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[2]);
printf("C\n");
sleep(1);
sem_post(&sem[0]);
}
sem_destroy(&sem[2]);
pthread_exit(NULL);
}int main()
{
sem_init(&sem[0],0 ,1);
sem_init(&sem[1],0 ,0);
sem_init(&sem[2],0 ,0);
pthread_t ptid[3];
if(pthread_create(&ptid[0],NULL,task1,"friend1")!=0)
{
perror("pthread_create error!");
exit(1);
};
if(pthread_create(&ptid[1],NULL,task2,"friend2")!=0)
{
perror("pthread_create error!");
exit(1);
}if(pthread_create(&ptid[2],NULL,task3,"friend2")!=0)
{
perror("pthread_create error!");
exit(1);
}
pthread_exit(NULL);
}
推荐阅读
- 代码狂魔|实战证明java中的两把锁ReentrantLock与synchronized的系统调用
- 进程通信方式
- 解决方案|大文件拆分方案的java实践
- 多线程编程(1)(共享内存与锁)
- Java|多线程编程(二)——面试题,每个线程只打印一种字符,多个线程协同顺序打印n次字符串(求大神的其他实现方案)
- 一道面试题(多个线程按顺序输出)
- 多线程|java多线程实现奇偶数输出
- 面试题--三个线程循环打印ABC 10次(另类解决方法)
- 用信号量(互斥锁)实现两个线程交替打印