linux多线程编程入门-同步机制-互斥量

原创 2013年12月03日 10:40:25

所谓同步,并不是日常用语中的同时进行的意思。这里的同步是指如何阻止同步进行的意思。

互斥量,又称互斥锁,它允许程序员锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁。


  加锁解锁成对出现。如果一个线程已加锁,而另一个线程试图加锁,则会阻塞在那里,直到第一个线程解锁,才继续往下执行。如果同一个线程连着两次加锁,则死锁,因为没有解锁。而解锁多加没有关系。

1 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr); mutex:互斥量对象。mutexattr:互斥量对象属性,默认NULL即可。
2 int pthread_mutex_lock(pthread_mutex *mutex);
3 int pthread_mutex_destroy(pthread_mutex *mutex);
4 int pthread_mutex_unlock(pthread_mutex *

一个非常简单的应用互斥锁的很直观的例子,如果去掉锁,则结果不同。这仅是一个简单的范例,在实际应用中,多线程对同一个元素的操作都需要加锁,否则总有概率会出现类似这个例子中 出现的问题,即使可以通过sleep手段撇脚的暂时避开。

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
void * thread_fun1(void * arg);
void * thread_fun2(void * arg);
int a = 200;
int b = 400;
pthread_mutex_t work_mutex;

int main()
{
	pthread_t thread1, thread2;
	int res;
	res = pthread_mutex_init(&work_mutex, NULL);
	pthread_create(&thread1, NULL, thread_fun1, NULL);
	pthread_create(&thread2, NULL, thread_fun2, NULL);
	pthread_join(thread1, NULL);
	pthread_join(thread2, NULL);
	pthread_mutex_destroy(&work_mutex);
	exit(EXIT_SUCCESS);
}
void * thread_fun1(void * arg)
{
	pthread_mutex_lock(&work_mutex);
	a += 50;
	sleep(5);
	b -= 50;
	pthread_mutex_unlock(&work_mutex);
}
void * thread_fun2(void * arg)
{
	pthread_mutex_lock(&work_mutex);
	sleep(1);
	printf("a+b is %d\n", a+b);
	pthread_mutex_unlock(&work_mutex);
}


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

相关文章推荐

linux下多线程同步机制之信号量、互斥量、读写锁、条件变量

之前有写过类似的博客,这东西不用老忘,现在又有更清晰的理解了。 一、信号量 信号量最基本的两个操作就是PV操作:P()操作实现信号量减少,V()操作实现信号量的增加 信号量的值取决于信号量的类型,信号...
  • ylf13
  • ylf13
  • 2013-10-29 16:39
  • 5686

linux多线程-----同步机制(互斥量、读写锁、条件变量)

linux多线程-----同步机制(互斥量、读写锁、条件变量)

windows多线程同步机制---互斥量

1 互斥量     多个线程同时只能有一个执行.等候到互斥量的线程就拥有了互斥量,在线程释放该互斥量之前,别的等候该互斥量的线程都不会等候到        2 互斥量使用     2.1 创建互斥  ...

【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程同步机制

【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程同步机制

C++多线程编程同步技术剖析:临界区,时间,信号量,互斥量

摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量; 正文 使线程同步   在程序...

C++多线程编程同步技术剖析:临界区,时间,信号量,互斥量

摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。 关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量; 正文 使...

Linux多线程同步机制 .linux多线程编程机制

一、互斥锁 尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同...

对多线程编程和线程同步机制的小理解

多线程技术被设计出来是为了充分利用多核cpu的优势,让cpu

Linux 同步机制:互斥量

互斥锁互斥锁也叫互斥量,也是Linux的一种同步机制。互斥锁相比信号量增加了所有权的概念,被锁的互斥量只能由给它上锁的线程解开,而信号量则无此限制。信号量侧重在资源的数量,可用来实现按一定逻辑调度线程...

线程同步机制:互斥量、信号量、读写锁、条件变量

一、互斥量(mutex)   互斥量本质上是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。   对互斥量进行加锁以后,任何其它试图再次对互斥量加锁的线程将会被阻塞...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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