gpt4 book ai didi

c - 在共享数据中使用原子整数

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:56 26 4
gpt4 key购买 nike

我正在研究操作系统和同步,我想到了在不同步的情况下处理这些共享数据,但我不确定它是否可行。这是代码

现在,竞争条件显然是共享数据中的递增和递减。但是如果整数变量是原子的呢?我想当我只是 CS 的初学者时我读到了一些关于这个的东西所以问题可能并不完美。作为据我所知,它正在阻止某些东西以防止同时增加和减少。现在,我对此有点困惑,因为如果原子变量真的有效,就不需要为这样的简单代码找到同步方法一个。

注意:代码已被删除,因为它只是改变了人们的焦点并且答案提供了足够的信息

最佳答案

就目前而言,并发调用代码确实不安全,因此必须有某种同步来防止这种情况发生。

现在,关于使 num_processes 成为原子的想法,那是可行的。不过,这不是一个简单的替换,特别是与最大值相比,递增必须以原子方式完成,而不是分两步完成,否则你仍然有竞争条件。特别是,必须避免以下步骤:

  1. 线程 A 检查是否达到限制,但实际上没有。
  2. 线程 B 检查是否达到限制,但实际上没有。
  3. 线程 B 递增 PID 计数器。
  4. 线程 A 递增 PID 计数器。

每个步骤本身都是原子的,但显然这无助于防止 PID 溢出。相反,代码必须检查计数器是否未达到限制,然后以原子方式递增它。这也是一项常见任务(比较和递增),因此您应该很容易找到现有的代码示例。

但是,我很确定这不是所有涉及的代码,一些其他代码(例如 get_processID() 或释放 PID 的代码)仍然需要锁定整体。

关于c - 在共享数据中使用原子整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com