ChinaUnix.net
相关文章推荐:

linux 信号量

信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()减少信号量。函数sem_trywait()和函数pthread_ mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。下面我们逐个介绍和信号量有关的一些函数,它们都在头文件/usr/include/semaphore.h中定义。 信号量的数据类型为结构s...

by bokin - Linux文档专区 - 2008-11-19 21:51:06 阅读(642) 回复(0)

相关讨论

本例示范linux信号量的基本用法。该范例使用了两个线程分别对一个公用队列进行入队和出队操作,并用信号量进行控制,当队列空时出队操作可以被阻塞,当队列满时入队操作可以被阻塞。 主要用到的信号量函数有: sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:阻塞等待若干时间直到信号量>0。 sem_post:使信号量加1。 s...

by liyong042 - Linux文档专区 - 2009-11-03 11:24:20 阅读(1531) 回复(0)

sem_op:如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0 struct sembuf   {   unsigned short sem_num; /* semaphore number */   short sem_op; /* semaphore operation */   short ...

by liduan - C/C++ - 2010-12-02 15:13:55 阅读(3280) 回复(11)

linux信号量编程实例 2007-12-17 14:45 作者: 呆若木鸡 本例示范linux信号量的基本用法。该范例使用了两个线程分别对一个公用队列进行入队和出队操作,并用信号量进行控制,当队列空时出队操作可以被阻塞,当队列满时入队操作可以被阻塞。 主要用到的信号量函数有: sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:...

by EnderViking - Linux文档专区 - 2008-05-30 18:01:45 阅读(928) 回复(0)

POSIX信号量 与POSIX信号量比较System V信号量潜在的学习曲线要高得多,当阅读完这个部分并和上面System V的部分对比,你就会更加的这么认为。 首先,POSIX使用简单的语义去创建、初始化和对信号量进行操作。它们提供了一个有效的方式来处理进程间通讯。POSIX有两种类型的信号量,有名信号量和无名信号量。 有名信号量 如果你看man手册,你将会看到一个有名信号量像system v信号量一样由一个名字标识,并且类似的这个信号量也有内...

by 偏执小猛 - Linux文档专区 - 2009-12-12 14:25:46 阅读(1387) 回复(0)

linux中的信号量 多线程应用逐步的成为商业应用的一个重要的组成部分,很难想象任何非多线程的成熟的商业应用,这些应用都要使用多线程技术用于提升系统或是应用的性能。尽管这样,事情往往都不是那么的美好,就像多线程特性的使用同样也导致了一系列的问题例如:死锁,竞态条件,多线程的不正常行为等等。为了解决这些问题,操作系统提供了一系列的方法比如:互斥锁(mutex)、信号量(semaphores)、信号和内存屏障机制。这篇文章将...

by 偏执小猛 - Linux文档专区 - 2009-12-12 14:18:02 阅读(1411) 回复(0)

作者: 呆若木鸡 本例示范linux信号量的基本用法。该范例使用了两个线程分别对一个公用队列进行入队和出队操作,并用信号量进行控制,当队列空时出队操作可以被阻塞,当队列满时入队操作可以被阻塞。 主要用到的信号量函数有: sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:阻塞等待若干时间直到信号量>0。 sem_pos...

by tchlinux - Linux文档专区 - 2009-10-22 13:46:02 阅读(1718) 回复(0)

(1)信号量的初始化有以下几种方式。 1.void sema_init (struct semaphore *sem, int val); 该函用于数初始化设置信号量的初值,它设置信号量sem的值为val。 2.DECLARE_MUTEX(name) 该宏声明一个信号量name并初始化它的值为0,即声明一个互斥锁。 3.DECLARE_MUTEX_LOCKED(name) 该宏声明一个互斥锁name,但把它的初始值设置为0,即锁在创建时就处 在已锁状态。因此对于这种锁,一般是先释放...

by wxju168 - Linux文档专区 - 2009-01-14 19:26:28 阅读(818) 回复(0)

1。POSIX无名信号量 如果你学习过操作系统,那么肯定熟悉PV操作了.PV操作是原子操作.也就是操作是不可以中断的,在一定的时间内,只能够有一个进程的代码在CPU上面执行.在系统当中,有时候为了顺利的使用和保护共享资源,大家提出了信号的概念. 假设我们要使用一台打印机,如果在同一时刻有两个进程在向打印机输出,那么最终的结果会是什么呢.为了处理这种情况,POSIX标准提出了有名信号量和无名信号量的概念,由于linux只实现了无名信...

by tuyer - Linux文档专区 - 2008-09-27 10:47:13 阅读(1052) 回复(0)

linux系统下信号量的用法 creator sz111@126.com (1)信号量的初始化有以下几种方式。 1.void sema_init (struct semaphore *sem, int val); 该函用于数初始化设置信号量的初值,它设置信号量sem的值为val。 2.DECLARE_MUTEX(name) 该宏声明一个信号量name并初始化它的值为0,即声明一个互斥锁。 3.DECLARE_MUTEX_LOCKED(name) 该宏声明一个互斥锁name,但把它的初始值设置为0...

by creatorwu - Linux文档专区 - 2008-05-07 15:43:12 阅读(747) 回复(0)

内核中使用的信号量用于共享资源的同步访问。有down(),up()两种类型的操作。down()用于获取资源,而up()是释放资源。一个任务想通过调用down()获取资源,而代表该资源的信号量表示“没有可用资源”的时候,进程转入等待状态,直到占有资源的进程调用up()释放资源后才能被唤醒。进程的等待与唤醒通过等待队列实现( http://blog.chinaunix.net/u1/35101/showart_485204.html )。1. 普通信号量:数据结构:struct semap...

by jaffaz - Linux文档专区 - 2008-03-03 13:01:05 阅读(772) 回复(0)