易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux下利用条件变量实现读写锁

首先介绍下pthread_cond_t。 在Linux下称之为状态变量,与之相关的有下面几个API:
    int pthread_cond_init (pthread_cond_t *COND,pthread_condattr_t *cond_ATTR);
    int pthread_cond_signal (pthread_cond_t *COND);
    int pthread_cond_broadcast (pthread_cond_t *COND);
    int pthread_cond_wait (pthread_cond_t *COND, pthread_mutex_t *MUTEX);
    int pthread_cond_timedwait (pthread_cond_t *COND, pthread_mutex_t *MUTEX, const struct timespec *ABSTIME);
    int pthread_cond_destroy (pthread_cond_t *COND);
这里就讲下2个api,pthread_cond_signal和pthread_cond_wait,一般的用法如下:
{
    pthread_mutex_lock(lock)
...
    pthread_cond_wait(cond, lock);
...
    pthread_cond_mutex_unlock(lock);
}
pthread_cond_wait会解锁lock,然后在cond上等待,这两步是atomic operation. 当pthread_cond_wait返回时,会同时对lock上锁. 这里我的理解是,如果获取不到lock锁,即使cond已经被激活,pthread_cond_wait依然不会返回。
{
    pthread_mutex_lock(lock);
...
    pthread_cond_signal(cond);
...
    pthread_mutex_unlock(lock);
}
pthread_cond_signal调用之前一定会先拿到lock锁。pthread_cond_signal不会去管lock锁,只是将cond激活,接下去释放lock锁。这时候pthread_cond_wait就可以得到lock从而返回了。
言归正传,下面是利用条件变量实现的一个读写锁的例子:
typedef struct pthread_rwlock
{
int active_readers; /* -1 when writer lock locked, >0 when read lock locked */
int pending_readers;
int pending_writers;
pthread_mutex_t mutex;
pthread_cond_t ok_to_read;
pthread_cond_t ok_to_write;
} pthread_rwlock_t ;
int pthread_rwlock_init(pthread_rwlock_t * lock, pthread_rwlockattr_t *attr)
{
active_readers = 0;
pending_readers = 0;
pending_writers = 0;
pthread_mutex_init(&lock->mutex, NULL);
pthread_cond_init(&lock->ok_to_read, NULL);
pthread_cond_init(&lock->ok_to_write, NULL)


相关文档:

Linux 汇编语言开发指南


developerWorks 中国
  >  
Linux
  >
Linux 汇编语言开发指南
文档选项
<tr
valign="top"><td width="8"><img alt="" height="1" width="8"
src="//www.ibm.com/i/c.gif"/></td>< ......

Linux网络配置

网络配置:
  VMware安装后会有几个默认网卡,分别是Vmnet0,Vmnet1和Vmnet8,常用HOST-ONLY,Bridge和NAT联网方式。本文介绍NAT方式。
Vmware设置:  
在Vmware设置好Ubuntu的网络连接方式,选择NAT
IP地址可以通过vmware>edit>virtual networking settings 查看,如下图:
 
 
NAT设 ......

Mr. Process的一生-Linux内核的社会视角 (2)启动

其实这才应该是这一系列文章的第一节,因为这篇文章讲的是盘古开天地的事。话说Mr.
Process是一个现代人,但是,只要是人,总该有个祖先。人们总想知道自己从哪来,然后才可以估摸算一下自己将去向何方。所以咱也要了解一下
Linux的世界里人类的起源。
图1:从上电到BIOS
按下电源开关的那个真实的人就是Linux世界里的 ......

裁减 Linux 嵌入式系统:方法与实例

原PDF: 《縮減 Linux嵌入式系統軟體: 方法與實例 》
作者:梁元彪 林盈达
刘建文整理(http://blog.csdn.net/keminlau )
KEY:嵌入式操作系统 裁减 linux embedded
国立交通大学资讯科学系
300 新竹市大学路 1001 号
Tel: 03-5712121 ext. 56667 Fax: 03-5712121 e ......

linux init六种模式简介


init是Linux系统里的根进程,是系统所有进程的祖先。它的主要作用是根据记录在/etc/inittab里的一个脚本(script)程序产生进程。这个文件通常用于控制用户的登录模式。Linux系统的有效登录模式有0~9共十种,不过沿用UNIX系统的至多6种的限制,一般只有1到6有效。
  init一般在系统启动时自动运行,也可以由root用户调 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号