C语言信号量实现两线程循环打印
2013-08-03 21:19
260 查看
#include <stdio.h>
#include <pthread.h>
#include <error.h>
#include <sys/types.h>
#include <semaphore.h>
#include <stdlib.h>
sem_t sem1,sem2;
int number[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
void thread1(void)
{
do
{
sem_wait(&sem1);//等待sem1信号量
printf("thread1--->number[%d]=%d\n",i,number[i]);
i++;
sem_post(&sem2);//增加sem2信号量,使得thread2能够执行
}while(i<=9);
pthread_exit(NULL);
}
void thread2(void)
{
do
{
sem_wait(&sem2);
printf("thread2--->number[%d]=%d\n",i,number[i]);
i++;
sem_post(&sem1);
}while(i<=9);
pthread_exit(NULL);
}
int main()
{
int ret;
pthread_t a,b;
sem_init(&sem1,0,1);//初始化sem1为1,使thread1先执行
sem_init(&sem2,0,0);
ret=pthread_create(&a,NULL,(void *)thread1,NULL);
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}
ret=pthread_create(&b,NULL,(void *)thread2,NULL);//返回值为0,创建成功
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}
pthread_join(a,NULL);
pthread_join(b,NULL);
sem_destroy(&sem1);
sem_destroy(&sem2);
return 0;
}
#include <pthread.h>
#include <error.h>
#include <sys/types.h>
#include <semaphore.h>
#include <stdlib.h>
sem_t sem1,sem2;
int number[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
void thread1(void)
{
do
{
sem_wait(&sem1);//等待sem1信号量
printf("thread1--->number[%d]=%d\n",i,number[i]);
i++;
sem_post(&sem2);//增加sem2信号量,使得thread2能够执行
}while(i<=9);
pthread_exit(NULL);
}
void thread2(void)
{
do
{
sem_wait(&sem2);
printf("thread2--->number[%d]=%d\n",i,number[i]);
i++;
sem_post(&sem1);
}while(i<=9);
pthread_exit(NULL);
}
int main()
{
int ret;
pthread_t a,b;
sem_init(&sem1,0,1);//初始化sem1为1,使thread1先执行
sem_init(&sem2,0,0);
ret=pthread_create(&a,NULL,(void *)thread1,NULL);
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}
ret=pthread_create(&b,NULL,(void *)thread2,NULL);//返回值为0,创建成功
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}
pthread_join(a,NULL);
pthread_join(b,NULL);
sem_destroy(&sem1);
sem_destroy(&sem2);
return 0;
}
相关文章推荐
- 实现两个线程A,B,A打印5个奇数,B打印5个偶数,交替进行,如此循环50次
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- java 实现3个线程 依次打印ABC,并且循环10次
- Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java实现【有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABC.】
- 有三个线程ID分别是A、B、C,请有多线编程 实现 在屏幕上循环打印10次ABCABC......
- 利用互斥信号量实现两个线程打印AB,输出5次
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java 实现3个线程 依次打印ABC,并且循环10次
- Semaphore实现的三个线程协作循环打印10次ABC的方法
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- 循环队列的实现(C语言)
- 【C语言】把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。
- C语言下调试信息打印与错误位置定位功能的实现
- iOS 通过添加线程依赖和信号量结合实现一个复杂界面请求多个接口时按指定顺序执行
- 用C语言实现简单循环队列结构
- c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化
- [嵌入式开发模块]环形缓冲区/循环队列 C语言实现