1005实现一个线程从共享的缓冲区中读数据,另一个线程向共享的缓冲区中写数据
2017-11-23 19:56
218 查看
/*
编写一个程序,实现一个线程从共享的缓冲区中读数据,另一个线程向共享的缓冲区中写数据
对共享的缓冲区的访问控制是通过使用一个互斥锁来实现的。
*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define FALSE 0
#define TRUE 1
void readfun();
void writefun();
char buffer[256];
int buffer_has_item=0;
int retflag=FALSE;
pthread_mutex_t mutex;
int main(int argc, char argv[])
{
pthread_t reader;
pthread_mutex_init(&mutex,NULL);
pthread_create(&reader,NULL,(void )&readfun,NULL);
writefun();
}
void readfun()
{
while(1)
{
if(retflag)
return;
pthread_mutex_lock(&mutex);
if(buffer_has_item==1)
{
printf("%s",buffer);
buffer_has_item=0;
}
pthread_mutex_unlock(&mutex);
}
}
void writefun()
{
int i=0;
while(1)
{
if(i==10)
{
retflag=TRUE;
return;
}
pthread_mutex_lock(&mutex);
if(buffer_has_item==0)
{
sprintf(buffer,"This is %d\n",i++) ;
buffer_has_item=1;
}
pthread_mutex_unlock(&mutex);
}
}
编写一个程序,实现一个线程从共享的缓冲区中读数据,另一个线程向共享的缓冲区中写数据
对共享的缓冲区的访问控制是通过使用一个互斥锁来实现的。
*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define FALSE 0
#define TRUE 1
void readfun();
void writefun();
char buffer[256];
int buffer_has_item=0;
int retflag=FALSE;
pthread_mutex_t mutex;
int main(int argc, char argv[])
{
pthread_t reader;
pthread_mutex_init(&mutex,NULL);
pthread_create(&reader,NULL,(void )&readfun,NULL);
writefun();
}
void readfun()
{
while(1)
{
if(retflag)
return;
pthread_mutex_lock(&mutex);
if(buffer_has_item==1)
{
printf("%s",buffer);
buffer_has_item=0;
}
pthread_mutex_unlock(&mutex);
}
}
void writefun()
{
int i=0;
while(1)
{
if(i==10)
{
retflag=TRUE;
return;
}
pthread_mutex_lock(&mutex);
if(buffer_has_item==0)
{
sprintf(buffer,"This is %d\n",i++) ;
buffer_has_item=1;
}
pthread_mutex_unlock(&mutex);
}
}
相关文章推荐
- 如果一个类通过继承Thread来实现多线程的话,则不适合多个线程共享资源,而通过实现Runnable就可以做到这一点
- [转] 用ROW_NUMBER()实现取指定行的数据 和从一个表中向另一个表中插入数据并实现某字段每行递增
- 【vim】复制一个文件中的数据到另一个文件中(使用缓冲区)
- [C++应用程序性能优化]类的静态成员变量实现同一个类多个对象之间共享数据
- 用Java 实现一个表中的数据复制到另一个表中
- 【SqlServer】如何实现用一个表中的数据修改另一个表中的数据?
- ThreadLocal实现线程范围内的数据共享
- 张孝祥实现线程范围内数据共享(学习笔记)
- 线程间共享数据的一个例子
- .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
- Android AsyncTask实现一个线程操作完成后启动另一个线程
- ThreadLocal类实现线程范围内数据共享
- ThreadLocal实现:java线程范围内的共享数据,线程外独立
- 线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用,不过要注意的是线程间需要做好同步。
- 点击button按钮后,启动一个实现鼠标拖动另一个button的线程 (JFrame/C# WinForm)
- MySql中把一个表的数据插入到另一个表中的实现代码
- 编写一个生产者,消费者多线程程序,一个线程随机产生数据,另一个线程显示所产生的数据.
- Java中如何实现单个线程范围内的数据共享
- java-线程-用ThreadLocal类实现线程范围内的数据共享
- 一个AspxGridView包含另一个AspxGridView实现主从数据绑定