首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >信号量会导致种族状况吗?

信号量会导致种族状况吗?
EN

Stack Overflow用户
提问于 2021-06-19 06:05:14
回答 2查看 633关注 0票数 2

我是一名学生,目前正在学习操作系统的并发-信号量。我读过关于信号量、互斥量和信号量的书和文章.但似乎不能回答标题的条件。

有一个信号量,信号量可分为“二进制信号量”和“计数信号量”,按初始值分类。我理解二进制信号量可以通过与互斥体类似的行为来防止竞争条件(但由于各种原因,两个信号量并不相同)。

我好奇的是,当我们初始化信号量大于或等于2的值时,假设n,那么n值就可以进入临界会话。那么信号量的使用是否会导致种族状况?

我读过关于计数信号量的文章,并认为它们被认为是用来跟踪对资源的访问,我对我们不像这样使用计数信号量而不是使用计数信号量来解决并发问题感到困惑吗?

因为我的问题不详细,所以在下面添加。

例如,当有100个线程时,我初始化X=10,然后用sem_init(&s, 0, X)初始化信号量,如果线程的代码流中有一个关键会话,那么它是否会导致争用条件,因为10个线程可以使用资源并遍历线程流吗?

EN

回答 2

Stack Overflow用户

发布于 2021-06-19 06:13:37

信号量防止比赛条件。在有多个可用资源实例的情况下,使用计数信号量。

如果它们控制对单个资源的访问,那么将使用互斥信号量。如果有两个资源可以使用,那么将使用两个计数信号量。如果有三个,那么三个信号量就会出现,依此类推。

票数 0
EN

Stack Overflow用户

发布于 2021-06-19 06:32:27

我好奇的是,当我们初始化大于或等于2的信号量的值时,假设n,那么n值就可以进入临界会话。那么信号量的使用是否会导致种族状况?

您正在谈论的是一个计数信号量,它通常被初始化为0。实际上,我想不出要将其初始化为值>0的用例,因为每个等待的线程/任务都会导致计数信号量在等待期间增加。此外,增量是原子指令,不会造成并发问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68044114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档