互斥锁 信号量-信号量 与 互斥锁的问题不理解

问题描述

信号量 与 互斥锁的问题不理解

现在有50条线程在执行

这函数
void Funtion()
{
while(1)
{
if(信号量 --)
{
if(加锁)
{

        解锁()
       }
     // 这里工作 5秒
    }

}

}

还有个函数
这个函数 随机调
void fun
{
if(加锁)
{
信号量++
解锁
}
}

请教一下 1秒有时执行 1百W次fun 这个函数 会有什么不正常的状态吗???比如说死锁

解决方案

解决方案二:

信号量与互斥锁
信号量与互斥锁
信号量与互斥锁

解决方案三:

http://www.cnblogs.com/diyingyun/archive/2011/12/04/2275229.html

解决方案四:

主要是加锁如果互斥了,那么其他线程等待,就可以避免死锁

时间: 2024-09-17 04:39:44

互斥锁 信号量-信号量 与 互斥锁的问题不理解的相关文章

关于信号量与线程互斥锁的区别与实现

  http://dev.firnow.com/course/6_system/linux/Linuxjs/20090901/173322.html 之前一直没有怎么关注过这个问题,前些日子在面试一家公司的时候,面试官提到了pthread_cond_wait/pthread_cond_signal的实现,当时答的不是很好,回来就查了nptl的代码.前天,水木上又有人问到了信号量和互斥锁的问题,我想还是对它们的区别与实现总结一下. 首先了解一些信号量和线程互斥锁的语义上的区别: >>>&g

互斥-Mutex和信号量的区别???

问题描述 Mutex和信号量的区别??? 锁--互斥量(Mutex):信号量与互斥量的区别是它可以被一个线程获取并由另一个线程释放,而互斥量始终都是一个线程. 这看起来似乎有点不可思议啊. 能解释一下不? 解决方案 互斥量是一次只能有一个线程拿到这把锁.信号量是可以设置多个线程拿到这把锁.当超过个数限制后,其他线程就只能等了

linux 自旋锁和信号量【转】

转自:http://blog.csdn.net/xu_guo/article/details/6072823 版权声明:本文为博主原创文章,未经博主允许不得转载.   自旋锁最多只能被一个可执行线程持有(读写自旋锁除外).自旋锁不会引起调用者睡眠,如果一个执行线程试图获得一个已经被持有的自旋锁,那么线程就会一直进行忙循环,一直等待下去(一直占用 CPU ),在那里看是否该自旋锁的保持者已经释放了锁, " 自旋 " 一词就是因此而得名. 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋

Linux 内核同步之自旋锁与信号量的异同【转】

转自:http://blog.csdn.net/liuxd3000/article/details/8567070 Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux 提供了多种解决竞态问题的方式,这些方式适合不同的应用场景.   Linux 内核是多进程.多线程的操作系统,它提供了相当完整的内核同步方法.内核同步方法列表如下: 中断屏蔽 原子操作 自旋锁 读写自旋锁 顺序锁 信号量 读写信号量 BKL (大内核锁) Seq 锁 一.并发与竞态

同步-互斥量 临界区 信号量 条件变量 效率对比

问题描述 互斥量 临界区 信号量 条件变量 效率对比 windows 下,如下四种同步方式中,互斥量 临界区 信号量 条件变量, 效率对比,求指导,谢谢 解决方案 据我自己在windows下的测试,信号量比条件变量高效,大概是其6倍 解决方案二: 条件变量效率应该最高,但是可能不是那么线程安全 临界区效率第二好 解决方案三: 临界区(Critical Section)(同一个进程内,实现互斥) 保证在某一时刻只有一个线程能访问数据的简便办法.在任意时刻只允许一个线程对共享资源进行访问.如果有多个

临界区、互斥量、信号量

1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问. 2.互斥量:为协调共同对一个共享资源的单独访问而设计的. 3.信号量:为控制一个具有有限数量用户资源而设计. 临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法.在任意时刻只允许一个线程对共享资源进行访问.如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开.临界区在被释放后,其他线程可以继续抢占

[MySQL学习] Innodb锁系统(4) Insert/Delete 锁处理及死锁示例分析

A.INSERT 插入操作在函数btr_cur_optimistic_insert->btr_cur_ins_lock_and_undo->lock_rec_insert_check_and_lock这里进行锁的判断,我们简单的看看这个函数的流程: 1.首先先看看欲插入记录之后的数据上有没有锁,    next_rec = page_rec_get_next_const(rec);    next_rec_heap_no = page_rec_get_heap_no(next_rec);  

php-PHP怎么能判断加了for update查询的mysql语句是否锁表了,如果锁表延时2秒。请教各位

问题描述 PHP怎么能判断加了for update查询的mysql语句是否锁表了,如果锁表延时2秒.请教各位 mysql加了mysql for update查询时,怎么判断锁表. 详细:最近在做一个项目(PHP),有条查询语句for update过,我想实现,当执行到该查询语句时,如果该查询语句此时有另外一个用户在执行,用sleep延时2秒再执行.我目前的思路是:该查询语句不是加了for update吗,那就判断如果该表锁表了,就延时2秒,是否可以判断是否锁表了,如果锁表了就延时2秒.请教各位大

android锁屏项目Home直接锁屏

问题描述 android锁屏项目Home直接锁屏 写了一个锁屏项目,有时候直接按手机home键会直接锁屏.求大神指导 解决方案 在 HOME 键的处理,与调用锁屏处增加 LOG,看看能不能分析出在什么情况下会引起误操作. 解决方案二: 检查项目代码,看看是不是逻辑处理有问题 解决方案三: 你应该是把方法写到了onResume()里面吧 解决方案四: 你是不是在HOME的监听事件里面调用了锁屏的方法!!! 解决方案五: 你是不是在HOME的监听事件里面调用了锁屏的方法!!! 解决方案六: 你是不是