#include "common.h"
#include <queue>
#define _COR_DATA_LEN 2048
typedef struct
{
char data_buf[_COR_DATA_LEN];
}s_cor;
queue <s_cor> myq;
pthread_rwlock_t rwlock;
void *recv_func(void *arg)
{
char buf[_COR_DATA_LEN]={0};
while(1)
{
pthread_rwlock_rdlock(&rwlock);//请求读锁
if(myq.empty())
{
//cout<<"queue is empty"<<endl;
}
else
{
memcpy(buf,myq.front().data_buf,_COR_DATA_LEN);
cout<<"** "<<buf<<endl;
myq.pop(); //移出队列,一定要执行这一句
}
pthread_rwlock_unlock(&rwlock);//解锁
}
}
int main()
{
s_cor data;
int i = 0;
pthread_t recv_pth = 0;
pthread_create(&recv_pth, NULL, recv_func, NULL);
while(1)
{
i++;
sprintf(data.data_buf,"%d",i);
pthread_rwlock_wrlock(&rwlock);//请求写锁
myq.push(data);
pthread_rwlock_unlock(&rwlock);//解锁
}
}
main函数往队列写数据,另一个线程读取数据并移出队列