项目-V0.0.4-线程同步

原创 2014年11月25日 10:07:30


说到线程的问题,说实话,我也有点理不清。

大约知道 操作 共享数据用 MUTEX锁起

挂起等信号用COND

 

一般是

pthread_mutex_lock(&mutex);

……

pthread_cond_wait(&cond,&mutex);  //其中是不是包含了一个解锁,等待的操作,等到了继续锁上?

……

pthread_mutex_unlock(&mutex);

 

所以,项目中的需求是这样的,一个优先队列Q,线程A:从本地读数据push到Q中,线程B:从WIFI读数据push到Q中,线程C:从Q中pop数据发送到网络对端。

 

所以,当A、B、C对Q进行操作的时候,就要拿到互斥锁。

大约的模拟方式,就是用一个全局静态变量i表示共享数据,线程A对i--,线程B和线程C对i++;

以下是代码

 

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h>

#define MAX  100000;

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  cond  = PTHREAD_COND_INITIALIZER;

static int i =0;

void * funA(void * arg)
{
	unsigned int k =MAX;
	while(k--)
	{
		pthread_mutex_lock(&mutex);
		if(i==0)
		{
			cout<<"i==0"<<endl;
			pthread_cond_wait(&cond,&mutex);
		}
		i--;
		pthread_mutex_unlock(&mutex);
		sleep(1)
	}
}


void * funB(void * arg)
{
	unsigned int k =MAX;
	while(k--)
	{
		pthread_mutex_lock(&mutex);
		if(i==0)
		{
			i++;
			pthread_cond_signal(&cond);
		}
		i++;
		cout<<i<<"___B"<<endl;
		pthread_mutex_unlock(&mutex);
		sleep(10)
	}
}



void * funA(void * arg)
{
	unsigned int k =MAX;
	while(k--)
	{
		pthread_mutex_lock(&mutex);
	
		i++;
		cout<<i<<"___C"<<endl;
		pthread_mutex_unlock(&mutex);
		sleep(10)
	}
}


int main(void)
{
	pthread_t id1,id2,id3;
	int res;

	res= pthread_create(&id1,NULL,funA,NULL);
	res= pthread_create(&id2,NULL,funB,NULL);
	res= pthread_create(&id3,NULL,funC,NULL);

	res = pthread_join(id1,NULL);
	res = pthread_join(id2,NULL);
	res = pthread_join(id3,NULL);

}


 

 

注意:编译连接的时候要带上 -lpthread !!!!

 

 

以上。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

线程同步的实现

  • 2017-08-25 16:27
  • 964B
  • 下载

线程同步编程实例

  • 2012-04-13 10:32
  • 1.14MB
  • 下载

线程同步

虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出...

线程同步 vc

  • 2012-03-08 00:04
  • 3.61MB
  • 下载

基于Linux 线程同步

Linux_5.3_线程同步

条件 创建 pthread_cond_init CreateEvent 销毁 pthread_cond_destroy CloseHandle 触发 pthread_cond_signal S...

Android 线程同步Demo

  • 2017-04-17 15:25
  • 21.48MB
  • 下载

Java线程同步实例

Java线程同步实例 实例1 public class mytread { public static void main(String[] args) { new Crea...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)