项目-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
  • 下载

C#线程同步(1)- 临界区&Lock

文章原始出处 http://xxinside.blogbus.com/logs/46441956.html 预备知识:线程的相关概念和知识,有多线程编码的初步经验。   一个机会,索性把线...

线程同步编程实例

  • 2012年04月13日 10:32
  • 1.14MB
  • 下载

线程同步 vc

  • 2012年03月08日 00:04
  • 3.61MB
  • 下载

Linux 线程同步的三种方法

线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 一、互斥锁(mutex) 通过锁机制...

基于Linux 线程同步

  • 2012年03月02日 16:34
  • 2KB
  • 下载

《Windows via C/C++》学习笔记 —— “线程同步”之“检测死锁”

本来这篇内容在书中是在“其他线程同步函数”这一节中的。这节中介绍了另外的几个等待函数,比如WaitForInputIdle、MsgWaitForMultipleObjects、WaitForDebug...
  • tam1896
  • tam1896
  • 2011年10月19日 10:54
  • 521

Android 线程同步Demo

  • 2017年04月17日 15:25
  • 21.48MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:项目-V0.0.4-线程同步
举报原因:
原因补充:

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