#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; /*初始化互斥锁*/
pthread_cond_t=PTHREAD_CODE_INITIALIZER; /*初始化条件变量*/
typedef struct{
char buffer[MAX];
int how_many;
}BUFFER;
BUFFER share={“”,0};
char ch=’A’;/*初始化ch*/
void *read_some(void *);
void *write_some(void *);
int main(void)
{
pthread_t t_read;
pthread_t t_write;
pthread_create(&t_read,NULL,read_some,(void *)NULL); /*创建进程t_a*/
pthread_create(&t_write,NULL,write_some,(void *)NULL); /*创建进程t_b*/
pthread_join(t_write,(void **)NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
exit(0);
}
void *read_some(void *junk)
{
int n=0;
printf(“R %2d: starting/n”,pthread_self());
while(ch!=’Z’)
{
pthread_mutex_lock(&lock_it);/*锁住互斥量*/
if(share.how_many!=MAX)
{
share.buffer[share.how_many++]=ch++;/*把字母读入缓存*/
printf(“R %2d:Got char[%c]/n”,pthread_self(),ch-1);/*打印读入字母*/
if(share.how_many==MAX)
{
printf(“R %2d:signaling full/n”,pthread_self());
pthread_cond_signal(&write_it);/*如果缓存中的字母到达了最大值就发送信号*/
}
pthread_mutex_unlock(&lock_it);/*解锁互斥量*/
}
sleep(1);
printf(“R %2d:Exiting/n”,pthread_self());
return NULL;
}
void *write_some(void *junk)
{
int i;
int n=0;
printf(“w %2d: starting/n”,pthread_self());
while(ch!=’Z’)
{
pthread_mutex_lock(&lock_it);/*锁住互斥量*/
printf(“/nW %2d:Waiting/n”,pthread_self());
while(share.how_many!=MAX)/*如果缓存区字母不等于最大值就等待*/
pthread_cond_wait(&write_it,&lock_it);
printf(“W %2d:writing buffer/n”,pthread_self());
for(i=0;share.buffer[i]&&share.how_many;++i,share.how_many--)
putchar(share.buffer[i]); /*循环输出缓存区字母*/
pthread_mutex_unlock(&lock_it);/*解锁互斥量*/
}
printf(“W %2d:exiting/n”,pthread_self());
return NULL;
}
|
相关推荐
Posix多线程编程学习笔记,包含多线程编程的众多知识
Posix多线程编程学习笔记1~6,包括线程基础,线程属性,信号灯,条件变量,互斥变量,共享内存六部分内容。很有助于linux下多线程的开发。文档主要包含介绍相应的pthread接口函数,并举了部分相应的例子。
Posix多线程编程
Posix多线程编程—线程属性.doc Posix多线程编程—线程属性.doc Posix多线程编程—线程属性.doc Posix多线程编程—线程属性.doc
POSIX多线程编程入门 英文版 POSIX多线程编程入门 英文版
Posix多线程编程[总结].pdf
posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码
POSIX多线程编程指南,帮助你进行POSIX多线程编程,可以做为LINUX开发人员的参考。
posix多线程编程, 入门例子, 代码例子已经调试过
POSIX多线程程序设计,讲述在Linux平台下使用POSIX进行多线程编程的教程。
POSIX多线程程序设计随书源码,很不错的多线程编程资料
posix多线程编程经典
多线程编程的经典好书
Posix_线程编程指南,包括线程创建,取消,私有数据,同步,终止等方面
基于posix多线程编程指南
linux下pthread的多线程编程+代码,适合初学者
Posix多线程编程.pdf