ChinaUnix.net
相关文章推荐:

linux 等待信号量 线程 down

竞态:就是当有几个进程同时抢用一个资源,就会产生竞态,表示同时在抢占一个资源的状态 //http://blog.chinaunix.net/u1/40912/showart_497651.html 解决的办法1: #include 采用信号量,当为1是表示资源可用,为0表示资源不可用 信号量初始化: sema_init(&scull_devices.sem, 1); //;注册一个信号量,初始化为1,表示可用。 (占有)获取信号量: if (down_interruptable(&dev->sem)) return -ERESTARTSYS; (信...

by chinagdszvv - Linux文档专区 - 2008-05-09 10:31:55 阅读(712) 回复(0)

相关讨论

现在有两个操作,一个in,一个out,操作一块公共数据(类似数组)。 要求如果in和out同时处理相同的记录,就串行。如果处理不同的记录就需要支持并行。 我们现在的处理核心逻辑为两个死循环:[code]in: while (true) lock mutex 设置当前row_id_in while (row_id_in == row_id_out) cv_in.wait mutex // 此处死锁 unlock mutex 输入处理 // lock mutex // 对是否死锁无影响 row_id_in置in特有空...

by _WalkinG_ - C/C++ - 2012-11-14 13:35:44 阅读(4950) 回复(20)

信号是E.W.Dijkstra在二十世纪六十年代末设计的一种编程架构。Dijkstra的模型与铁路操作有关:假设某段铁路是单线的,因此一次只允许一列火车通过。信号将用于同步通过该轨道的火车。火车在进入单一轨道之前必须等待信号灯变为允许通行的状态。火车进入轨道后,会改变信号状态,防止其他火车进入该轨道。火车离开这段轨道时,必须再次更改信号的状态,以便允许其他火车进入轨道。在计算机版本中,信号以简单整数来表示。线程等待获...

by liujunwei1234 - Linux文档专区 - 2009-12-06 19:26:51 阅读(1305) 回复(0)

小弟最近在看2.6内核中关于信号量机制的代码时,遇到一个问题希望大家帮忙解决! 以下是源代码: void __down(struct semaphore * sem) { struct task_struct *tsk = current; DECLARE_WAITQUEUE(wait, tsk); tsk->state = TASK_UNINTERRUPTIBLE; add_wait_queue_exclusive(&sem->wait, &wait); spin_lock_irq(&semaphore_lock); sem->sleepers++; for (;;) { int sleepers = sem->sleepers; /* * Add "everybody ...

by alarmjintian - 内核源码 - 2011-12-19 19:09:39 阅读(1001) 回复(1)
by candysuck - 内核/嵌入技术 - 2006-01-07 15:27:34 阅读(687) 回复(1)
by candysuck - 内核源码 - 2006-01-07 15:27:34 阅读(1166) 回复(1)

看到内核中线程同步的方法主要有:自旋锁和信号量(当然还有其他一些方法)。他们之间的区别主要是在获取不到资源时,进程的行为不一样:自旋锁-等待信号量-睡眠。 而用户态提供的线程同步方法主要有:信号量、互斥量、锁。但是书上却只有这三者的用法,却没有给出这三者的区别,以及适用的场合。 求助高手,能否详细说说这三者的区别及适用场合呢? 如果有具体的实例代码最好了!

by zhf_69 - Linux环境编程 - 2009-05-26 11:45:52 阅读(4451) 回复(5)

信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数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 阅读(561) 回复(0)

POSIX、OS/2 以及如何在两者之间架起桥梁 级别: 初级 Dinakar Guniguntala , 资深软件工程师, IBM Sathyan Doraiswamy ( [email=dsathyan@in.ibm.com?subject=第 1 部分,线程、互斥锁、信号量]dsathyan@in.ibm.com[/email] ), 资深软件工程师, IBM Anand K. Santhanam ( [email=asanthan@in.ibm.com?subject=第 1 部分,线程、互斥锁、信号量]asanthan@in.ibm.com[/email] ), 软件工程师, IBM Srinivasan S. Muthuswamy ( [e...

by lixuewei97 - Linux文档专区 - 2008-12-15 14:43:10 阅读(849) 回复(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 阅读(1366) 回复(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 阅读(3063) 回复(11)