当前位置: 技术问答>linux和unix
Linux c++ 消费者 生产者 互斥同步 问题
来源: 互联网 发布时间:2016-09-20
本文导语: 在Linux平台下用c++编写程序中。建立一个缓冲区,是又循环单链表构成的。因为生产者可以对之前的数据进行覆盖。有两个消费者,每个线程都有自己固定的指针。也就是多个线程对缓冲区内的各个不同单元可以进行...
在Linux平台下用c++编写程序中。建立一个缓冲区,是又循环单链表构成的。因为生产者可以对之前的数据进行覆盖。有两个消费者,每个线程都有自己固定的指针。也就是多个线程对缓冲区内的各个不同单元可以进行同步读写。但是在一个单元内不能有多个线程对它同时进行读写,想对缓冲区不加锁,在线程作用的单元加锁。但是对于互斥锁的理解还不强。不能够解决问题。还请各位给个解决方案。提供思路,还有可用的函数皆可。。。
不过因为本人是新手,所以请各位大侠将详细点。。。
不过因为本人是新手,所以请各位大侠将详细点。。。
|
1、既然用的是线程,可以直接用pthread_mutex
2、对每个单元建立一个pthread_mutex锁,在读写前加锁,读写动作完成后解锁。
3、相关函数原型如下:
#include
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
2、对每个单元建立一个pthread_mutex锁,在读写前加锁,读写动作完成后解锁。
3、相关函数原型如下:
#include
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
|
刚好前不久写过,只是缓冲区跟你的要求有点区别
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define NUM_THREADS_P 5 /*define the number of producer*/
#define NUM_THREADS_C 5 /*define the number of consumer*/
#define MAX_BUFFER 20
#define RUN_TIME 20
int buffer[MAX_BUFFER]; /*difine the buffer */
int produce_pointer=0,consume_pointer=0;
sem_t producer_mutex,consumer_mutex,buffer_mutex;
pthread_t threads_p[NUM_THREADS_P]; /*producer*/
pthread_t threads_c[NUM_THREADS_C]; /*consumer*/
FILE* fd;
void *producer_thread(void *tid);
void *consumer_thread(void *tid);
void showbuf();
void handler(){
int i;
for(i=0;i