当前位置: 技术问答>linux和unix
linux下的线posix线程,pthread_cond_signal(wait?)怎么是这样的?
来源: 互联网 发布时间:2015-06-22
本文导语: 我需要作一个posix线程的试验 内容大致是这样的 共有两个线程,一个用来采集数据,一个用来处理数据 两者用全局变量来共享数据 我是这样来设计的: 采集数据线程被create出来以后,就wait处理数据线程的准备好(read...
我需要作一个posix线程的试验
内容大致是这样的
共有两个线程,一个用来采集数据,一个用来处理数据
两者用全局变量来共享数据
我是这样来设计的:
采集数据线程被create出来以后,就wait处理数据线程的准备好(ready)的signal
处理数据线程准备好以后,就给采集数据线程一个准备好(ready)的signal
处理数据线程发完这个信号,就wait采集数据线程的数据采集完毕(ok)的signal
采集数据线程采集数据完毕,就给处理数据线程一个数据采集完毕(ok)的signal
然后循环以上过程
整个过程看起来像是这样:
for(;;)
{
producer: |wait|(are you ready ?I'm waitting for you) ==> consumer
consumer is ready now ...
producer consumer
consumer get data... consuming...
}
代码如下:
#include // for i/o
#include // for thread
#include //for ?
#include // ?
#include // for time()
typedef struct
{
float u;
float i;
float y;
} pwr_t;
char *info = "this is a test of thread";
const int max_u = 380;
const int max_i = 100;
const int max_y = 1000;
const int slp_tm = 1;
pwr_t pwr;
pthread_mutex_t pwr_mut ;//protect the global pwr;
pthread_cond_t pwr_ok;
pthread_cond_t pwr_rd;
//this is the thread that we get data from device
void *get_pwr(void *arg)
{
int times;
puts(arg);
srand(time(0));
while(times = COUNT_DONE) return(NULL);
}
}
内容大致是这样的
共有两个线程,一个用来采集数据,一个用来处理数据
两者用全局变量来共享数据
我是这样来设计的:
采集数据线程被create出来以后,就wait处理数据线程的准备好(ready)的signal
处理数据线程准备好以后,就给采集数据线程一个准备好(ready)的signal
处理数据线程发完这个信号,就wait采集数据线程的数据采集完毕(ok)的signal
采集数据线程采集数据完毕,就给处理数据线程一个数据采集完毕(ok)的signal
然后循环以上过程
整个过程看起来像是这样:
for(;;)
{
producer: |wait|(are you ready ?I'm waitting for you) ==> consumer
consumer is ready now ...
producer consumer
consumer get data... consuming...
}
代码如下:
#include // for i/o
#include // for thread
#include //for ?
#include // ?
#include // for time()
typedef struct
{
float u;
float i;
float y;
} pwr_t;
char *info = "this is a test of thread";
const int max_u = 380;
const int max_i = 100;
const int max_y = 1000;
const int slp_tm = 1;
pwr_t pwr;
pthread_mutex_t pwr_mut ;//protect the global pwr;
pthread_cond_t pwr_ok;
pthread_cond_t pwr_rd;
//this is the thread that we get data from device
void *get_pwr(void *arg)
{
int times;
puts(arg);
srand(time(0));
while(times = COUNT_DONE) return(NULL);
}
}
|
看不大懂,我编这样的程序都用互斥变量的.