2 sinat 33314857 sinat_33314857 于 2016.03.21 10:31 提问

对c++多线程编程中信号量的疑惑,求解

最近在写多线程,使用到信号量,对于信号量创建、释放createsemaphore和releasesemaphore中的初始资源数、最大并发数、计数增加个数不解,之前有用过,但都没有深入了解以至于现在模糊不清,最大并发数是指什么线程的最大并发数,自己线程or其他线程?增加的计数如果是2,是不是就相当于调用了两次waitfor函数?恳请熟悉这方面的朋友能给一个更为细致具体的讲解,小女不胜感激图片说明

1个回答

u012494939
u012494939   2016.03.21 11:37
已采纳

信号量就是限制同时只有1个或多个线程能够运行,数量取决于设置的最大并发数。
线程首先得申请一个资源才能够运行,运行结束后要释放资源。
计数增加应该是释放信号量后,信号量的可用个数增加

u012494939
u012494939 回复sinat_33314857: 并发数就是允许同时只有这几个线程运行;资源计数就是保证所有的任务都能够申请到这个信号量来执行,每个任务执行完成后需释放资源,留给其他任务申请使用
2 年多之前 回复
sinat_33314857
sinat_33314857 类似的,如果我有4个线程函数,那么我可以设置最大并发数为4,允许同一时间这四个线程都运行(对吗?求解);而资源计数,可以根据情况调整,既可以为1或者我需要当前线程一直执行可以的次数,直至计数值减为小于0值~谢谢朋友的解答~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Linux多线程编程-信号量
在Linux中,信号量API有两组,一组是多进程编程中的System V IPC信号量;另外一组是我们要讨论的POSIX信号量。这两组接口类似,但不保证互换。POSIX信号量函数都已sem_开头,并不像大多数线程函数那样以pthread_开头,常用的有以下5个: #include int sem_init(sem_t* sem, int pshared, unsigned int value)
【C/C++多线程编程之七】pthread信号量
多线程编程之信号量      Pthread是 POSIX threads 的简称,是POSIX的线程标准。          互斥量用来处理一个共享资源的同步访问问题,当有多个共享资源时,就需要用到信号量机制。          信号量机制用于保证两个或多个共享资源被线程协调地同步使用,信号量的值对应当前可用资源的数量。          1.信号量(samaph
linux下多线程编程,各种锁,信号量
转自http://mingxinglai.com/cn/2013/06/mutil-threads/ 最近研究mysql源码,各种锁,各种互斥,好在我去年认真学了《unix环境高级编程》, 虽然已经忘得差不多了,但是学过始终是学过,拿起来也快。写这篇文章的目的就是总结linux 下多线程编程,作为日后的参考资料。 本文将介绍linux系统下多线程编程中,线程同步的各种方法。包括:
Linux多线程编程(三)互斥锁和信号量编程例子
线程二此时和线程一应该是并发的执行 ,这里是一个要点,为什么说是线程此时是并发的执行,因为此时不做任何干涉的话,是没有办法确定是线程一先获得执行还是线程二先获得执行,到底那个线程先获得执行,取决于操作系统的调度,想刻意的让线程2先执行,可以让线程2一出来,先sleep一秒。
QT——QSemaphore(信号量)
它来处理一定数量的资源,生产者不断向缓冲写入数据直到缓冲末端 ,消费者从缓冲不断从缓冲头部 读取数据。 加入头文件: #include QSemaphore( int n = 0 )~QSemaphore()void acquire ( int n = 1 )int available () constvoid release ( int n = 1 )bool tryAcqui
C++多线程编程同步技术剖析:临界区,时间,信号量,互斥量
摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量; 正文 使线程同步   在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是
多线程编程(三)——线程同步——信号量
线程同步主要为了协调线程间工作,尤其是数据的使用, 第一个例子——生产者消费者: 设置: #库存最多1,有库存消费者才消费,没则等待;没库存生产者才生产,没则等待。 #并没有用semA本身做计数,只用来传达消息给消费者线程。 #为了体现阻塞效果,生产者三秒一次。 #include #include #include static pthread_t threa
【多线程】使用信号量进行同步
信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量及对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。 p操作和v操作是不可中断的程序段,
在VC6.0中多线程编程示例(带同步信号量)
直接上代码:#include //必要的头文件,使用Windows API函数 #include int index = 0; int tickets = 100;//票数 HANDLE hMutex; //使用全局的互斥对象来保证对同一资源的互斥访问与操作这里是tickets //线程处理函数原型,形式可从MSDN中拷贝 //线程1 的入口函数 DWORD WINAPI Fun1Proc
CMSIS-RTOS 中断处理Interrupt Handling
RTOS中断处理Interrupt Handling在RTOS中使用信号来触发线程间的行为是比较简单和高效的,而对于Cortex-M微控制器来讲,从中断源获取信号来触发线程同样是一种重要的方式。虽然在中断服务程序ISR中运行一段代码也可以,但在RTOS系统中,在中断运行的时间越短越好,因为太长的时间会延长定时器的节拍,并破坏RTOS内核。系统节拍运行的优先级在NVIC中是最低的,因此任何中断服务程序