当前位置: 技术问答>linux和unix
Linux 多线程编程
来源: 互联网 发布时间:2016-04-14
本文导语: 新建3个线程,分别完成不同的功能, 线程1,给你一数组赋值, 线程2,对该数组各项进行乘以10的运算 线程3,对乘以10 以后的数组进行除以3的运算,并将结果显示出来。 求一段代码,谢谢。 | ...
新建3个线程,分别完成不同的功能,
线程1,给你一数组赋值,
线程2,对该数组各项进行乘以10的运算
线程3,对乘以10 以后的数组进行除以3的运算,并将结果显示出来。
求一段代码,谢谢。
线程1,给你一数组赋值,
线程2,对该数组各项进行乘以10的运算
线程3,对乘以10 以后的数组进行除以3的运算,并将结果显示出来。
求一段代码,谢谢。
|
信号量应该可以,写了段代码,看看:
如果打印是按照0,1,2,0,1,2....的顺序,那么说明就OK了!
include
#include
#include
#define MAX_THREAD 3
pthread_t threadid[MAX_THREAD];
typedef struct _args_t
{
sem_t *sem1;
sem_t *sem2;
int val;
}args_t;
void func (void *data)
{
arg_t arg;
memcpy (&arg, data, sizeof(arg_t));
pthread_detach(pthread_self());
while (1)
{
sem_wait (arg.sem1);
printf ("in thraed %dn",arg.val);
sem_post (arg.sem2);
}
}
int main (int argc, char **argv)
{
arg_t data;
sem_t sem12, sem23, sem31;
sem_init (&sem12, 0, 0);
sem_init (&sem23, 0, 0);
sem_init (&sem31, 0, 0);
data.sem1 = &sem31;
data.sem2 = &sem12;
data.val = 0;
pthread_create (&threadid[0], NULL, func, &data);
data.sem1 = &sem12;
data.sem2 = &sem23;
data.val = 1;
pthread_create (&threadid[1], NULL, func, &data);
data.sem1 = &sem23;
data.sem2 = &sem31;
data.val = 2;
pthread_create (&threadid[2], NULL, func, &data);
sem_post (&sem31);
while (1)
{
sleep(5);
}
}
如果打印是按照0,1,2,0,1,2....的顺序,那么说明就OK了!
|
这个题目要做的三步如果在一个线程中就是一个串行,从先到后的执行序列。现在强制放到三个线程中,目的也是希望它们可以“按照这种先后次序来执行”,其实主要是考你使用线程互斥和条件变量的知识点!写个思路,代码自己去写:
用
pthread_mutex_lock,
pthread_cond_wait,
pthread_mutex_unlock
来阻塞等待其他线程的通知;
用
pthread_mutex_lock,
pthread_cond_signal,
pthread_mutex_unlock
来通知其他线程;
用
pthread_mutex_lock,
pthread_cond_wait,
pthread_mutex_unlock
来阻塞等待其他线程的通知;
用
pthread_mutex_lock,
pthread_cond_signal,
pthread_mutex_unlock
来通知其他线程;
|
用两个信号量就可以了啊。用互斥锁及条件变理更不好保证执行序列