linux 线程锁

1.互斥量:Mutex

a.用于互斥访问

b.类型:pthread_mutex_t,必须被初始化为PTHREAD_MUTEX_INITIALIZER(用于静态分配的mutex,等价于 pthread_mutex_init(…, NULL))或者调用pthread_mutex_init。Mutex也应该用pthread_mutex_destroy来销毁。

#i nclude <pthread.h>

1)

int pthread_mutex_init(

pthread_mutex_t *restrict mutex,

const pthread_mutexattr_t *restrict attr);

函数 pthread_mutex_init用来生成一个互斥锁,NULL参数表明使用默认属性;

如果需要声明特定属性的互斥锁,须调用函数 pthread_mutexattr_init.

函数 pthread_mutexattr_setpshared 和函数 pthread_mutexattr_settype 用来设置互斥锁属性。前一个函数设置属性pshared,它有两个取值, PTHREAD_PROCESS_PRIVATE和PTHREAD_PROCESS_SHARED。前者用来不同进程中的线程同步,后者用于同步本进程的不同线程。

2)

int pthread_mutex_destroy(pthread_mutex_t *mutex);

3)

int pthread_mutex_lock(pthread_mutex_t *mutex);

4)

int pthread_mutex_trylock(pthread_mutex_t *mutex);

5)

int pthread_mutex_unlock(pthread_mutex_t *mutex);

2.Conditional Variable:条件

a.条件必须被Mutex保护起来

b.类型为:pthread_cond_t,必须被初始化为PTHREAD_COND_INITIALIZER(用于静态分配的条件,等价于pthread_cond_init(…, NULL))或者调用pthread_cond_init

#i nclude <pthread.h>

1)

int pthread_cond_init(

pthread_cond_t *restrict cond,

const pthread_condxattr_t *restrict attr)

2)

int pthread_cond_destroy(pthread_cond_t *cond);

3)

int pthread_cond_wait(

pthread_cond_t *restrict cond,

pthread_mutex_t *restrict mutex);

4)

int pthread_cond_timedwait(

pthread_cond_t *restrict cond,

pthread_mutex_t *restrict mutex,

const struct timespec *restrict timeout);

5)

int pthread_cond_signal(pthread_cond_t *cond);

6)

int pthread_cond_broadcast(pthread_cond_t *cond);

时间: 2024-10-24 16:54:46

linux 线程锁的相关文章

linux线程锁的迷思

http://www.ibm.com/developerworks/cn/linux/thread/posix_thread3/#1 当多线程想要等待某一条件成立时,用pthread_cond_wait来阻塞线程, 首先明确wait的作用,pthread的wait与lock都可以阻塞线程等待"条件"成立,区别在于: wait之后的发送来的条件成立(pthread_cond_broadcast())才有效,之前发生都被丢弃了,也就是说wait的首次调用肯定会阻塞线程,不会因条件成立过而向

Linux 线程锁 pthread_mutex_t

1)初始化线程锁 静态初始化: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 或者动态初始化: int pthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t* attr); 其中 attr 用于指定互斥锁属性,如果为NULL则使用缺省属性. 函数成功执行后,互斥锁被初始化为未锁住态. 2)锁的操作 2.1)加锁: int pthread_mutex_lock(pt

Linux线程同步---互斥锁

线程中互斥锁使用的步骤与信号量相似! 1.首先定义互斥锁变量,并初始化 pthread_mutex_t mutex_lock;pthread_mutex_init(&mutex_lock,NULL);2.在操作前对互斥量进行加锁操作 pthread_mutex_lock(&mutex_lock);3.操作完毕后进行解锁操作 pthread_mutex_unlock(&mutex_lock); 所有操作均在加锁和解锁操作之间进行,保证同时仅仅对有一个操作对关键变量或是区域进行操作.

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

Linux 线程管理

解析1 LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数.但这个函数的执行过程比较难于理解. pthread_cond_wait()的工作流程如下(以MAN中的EXAMPLE为例):       Consider two shared variables x and y, protected by the mutex mut, and a condition vari-        able cond that is to be

Linux 线程模型的比较:LinuxThreads 与 NPTL

Linux 线程模型的比较:LinuxThreads 与 NPTL 本文参照来源:IBM开发者论坛 前奏:关于POSIX 可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX),是IEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945.此标准源于一个大约开始于1985年的项目.POSIX这个名称是由理查德·斯托曼应IEE

一个简单的线程锁------pthread和win32的临界区(Critical Section)

临界区: 临界区是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权.这是让若干代码能够"以原子操作方式"来使用资源的一种方法. 所谓原子(atomic)操作方式,是指这段代码知道没有别的线程要访问这个资源. 说明: 1.  MacOSX,Windows有自己的线程模型, pthread可以说是跨平台的线程编程模型解决方案,当然对pthread不熟悉的也可以使用本地线程模型, 其实pthread的win32版本也是基于本地线程模型的, pthread-win32的mutex

Linux互斥锁、条件变量和信号量

Linux互斥锁.条件变量和信号量  来自http://kongweile.iteye.com/blog/1155490 博客分类: Linux sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享.sem_wait:一直阻塞等待直到信号量>0.sem_timedwait:阻塞等待若干时间直到信号量>0.sem_post:使信号量加1.sem_destroy:释放信号量.和sem_init对应. 进行多线程编程,最应该注意的就是那些共享的数据

Linux线程学习(二)

一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可以读或写声明过的全局变量.如果曾用fork() 编写过重要代码,就会认识到这个工具的重要性.为什么呢?虽然fork() 允许创建多个进程,但它还会带来以下通信问题:如何让多个进程相互通信,这里每个进程都有各自独立的内存空间.对这个问题没有一个简单的答案.虽然有许多不同种类的本地IPC (进程间通信)