CTDP linux 程序员手册 C和C++编程(10)Linux mutex互斥和条件变量
2006-08-10 12:49
681 查看
mutex是确保两个线程(包括父线程)不会在同一时刻操作同一内存的方法。由此逻辑可以完成两个线程之间的数据发送,父线程拥有一个数据结构的缓存和与它相关的读写计数器。子线程可以从缓存中获得数据和写数据。当子线程读数据的时候,它填充缓存,并且更新计数器。父线程可以监视缓存计数器的值,并报告数据是否准备好:是或否,还是错误。并不是所有得系统都可以确认缓存可以被写以便程序可以去写数据。无论如何,当两个线程进行通讯时,采用一种锁机制以确保数据总是能够被正常读写是非常必要的。mutex就是这样的一种机制。它确保对于同样内存的操作是相互排斥的。 mutex结构和函数 pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER; intpthread_mutex_init(pthread_mutex_t*mutex,pthread_mutexattr_t*attr); intpthread_mutex_destroy(pthread_mutex_t*mutex); intpthread_mutex_lock(pthread_mutex_t*mutex);-锁住一个mutex.这个函数阻塞,一直到这个mutex被解锁.如果同一线程已经锁住了这个mutex不要再去对它加锁。 intpthread_mutex_trylock(pthread_mutex_t*mutex);-如果另外的进程已经锁住了这个mutex,函数将返回一个错误。但函数不会被阻塞。 intpthread_mutex_unlock(pthread_mutex_t*mutex); 不要拷贝mutex.一个mutex声明的例子: typedefstructinput_data { pthread_mutex_tmutex;//控制对sharedint的读写 intsharedint; }input_data; input_datadatain={PTHREAD_MUTEX_INITIALIZER,0}; |
条件变量用于传达带有一个mutex的共享数据的状态信息。当一个线程等待一个条件变量得时候,它将处于阻塞状态。
pthread_cond_tcond=PTHREAD_COND_INITIALIZER;
intpthread_cond_init(pthread_cond_t*cond,pthread_condattr_t*condattr);
intpthread_cond_destroy(pthread_cond_t*cond);
intpthread_cond_wait(pthread_cond_t*condition,pthread_mutex_t*mutex);
intpthread_cond_timedwait(pthread_cond_t*condition,pthread_mutex_t*mutex,structtimespec*expiration);
intpthread_cond_signal(pthread_cond_t*condition);
intpthread_cond_broadcast(pthread_cond_t*condition);
不要拷贝共享变量。一个关于共享变量声明的例子:
typedefstructinput_data
{
pthread_mutex_tmutex;//控制对sharedint的读写
pthread_cond_tcondition;//确定sharedint的变化
intsharedint;
}input_data;
input_datadatain={PTHREAD_COND_INITIALIZER,PTHREAD_MUTEX_INITIALIZER,0};
google_ad_client="pub-2416224910262877";
google_ad_width=728;
google_ad_height=90;
google_ad_format="728x90_as";
google_ad_channel="";
google_color_border="E1771E";
google_color_bg="FFFFFF";
google_color_link="0000FF";
google_color_text="000000";
google_color_url="008000";
相关文章推荐
- CTDP linux 程序员手册 C和C++编程(3)POSIX 功能性
- CTDP linux 程序员手册 C和C++编程(4)Linux POSIX 系统的兼容型
- CTDP linux 程序员手册 C和C++编程(8)文件和目录的 POSIX 选项
- CTDP linux 程序员手册 C和C++编程(11)Viewmod程序
- CTDP linux 程序员手册 C和C++编程(9)Linux 线程
- CTDP linux 程序员手册 C和C++编程(12)一个 Linux 串口测试例子
- CTDP linux 程序员手册 C和C++编程 调试 Linux 程序
- CTDP linux 程序员手册 C和C++编程(5)其他一些系统限制
- CTDP linux 程序员手册 C和C++编程(1)简介
- CTDP linux 程序员手册 C和C++编程(6)更多的Linux POSIX测试
- CTDP linux 程序员手册 C和C++编程(2)POSIX 编号
- CTDP linux 程序员手册 C和C++编程(7)系统 POSIX 选项
- CTDP linux 程序员手册 (4.1) Linux 脚本变量
- CTDP linux 程序员手册 (4.2) Linux 测试条件
- CTDP linux 程序员手册 (3) Linux 信号
- CTDP linux 程序员手册 (4.4)在Linux 脚本中经常要用到的程序
- CTDP linux 程序员手册 (4.9) 一个 makefile 脚本的例子
- CTDP linux 程序员手册 (2) IPC 进程间通讯
- CTDP linux 程序员手册 (4.5)Shell 的能力
- 详解linux互斥锁 pthread_mutex和条件变量pthread_cond