问题标签 [mutual-exclusion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
587 浏览

multithreading - 如果保证互斥,比如信号量,程序是否没有死锁?

我将互斥和死锁分别定义如下: 如果在每一刻,每个共享资源要么被分配给一个进程,要么可用,则互斥条件存在。如果一组进程中的每个进程都在等待只有该组中的另一个进程可以引发的事件,则该组进程会死锁。

比如说,使用二进制信号量,确保它们中只有一个可以同时进入其临界区。由于每个进程在进入其关键区域之前执行一次向下操作,并在离开它之后执行一次向上操作,因此可以保证互斥。

我知道有四个条件必须全部满足才能发生死锁,其中之一是互斥条件(没有两个进程可能同时在它们的关键部分内)。

既然保证了互斥,那么在这种情况下,程序是否没有死锁?

问候。

0 投票
1 回答
35 浏览

concurrency - 互斥问题中“切片”的含义

以下语句中的“切片”是什么意思:

作者试图表明该程序不满足互斥锁。它来自http://www.mcs.csueastbay.edu/~billard/os/mutex.txt

谢谢。

0 投票
1 回答
106 浏览

javascript - 在基于事件的系统中同时处理唯一性

在我现在正在进行的项目中,我们面临着我们所说的挑战。挑战有成员参与者。成员是有权访问挑战的每个人(可以是单个用户或用户组),参与者跟踪每个用户的参与统计信息。

每次添加新的挑战成员时,都会重新计算挑战参与者。这基于事件发生,因此挑战成员触发一个created事件,挑战参与者监听该事件。

当同时创建两个挑战成员时会出现问题,这意味着该事件也被触发了两次,并且代码的两次执行同​​时运行。为了显示:

如前所述,当上述代码同时运行时会出现问题,更具体地说,当第二次执行getParticipants在第一次执行之前到达时,参与者条目丢失了。两次执行都看到一些参与者丢失,并创建它们。这意味着我们现在有一些用户的挑战参与者重复条目。

现在我们解决这个问题的方法是challenge_id, user_id在挑战参与者上有一个唯一的索引。但是在违反约束时忽略错误确实感觉有点脏。这也使得检查其他 SQL 错误变得更加困难,因为所有错误都只是传递给回调,然后我们必须检查错误字符串的内容以查看它是否是我们喜欢的错误(违反唯一性),或者我们不喜欢的错误(例如语法错误),应该处理。

此代码将在多个服务器上运行,因此即使使用 mutice,我们也不能保证代码不会同时运行。我们也不介意它同时运行不同的挑战,只要它不同时运行相同的挑战。有没有人有处理这种类型的并发合并的建议?

0 投票
2 回答
2722 浏览

java - 如何在此应用程序中使用同步方法实现互斥

我在这里遇到了一个小问题。我正在用 Java 做一个并发程序。问题是:有 4 个人(学生)试图访问打印机,打印 5 个文档。但当时只有一个可以打印(很明显)5 个文件。当他们完成时,他们通知其他人他们已经完成并且其他线程访问该资源。我有一个主类,学生类和监视器(激光打印机),文档类,其中包含有关文档的信息,例如(页数,名称用户 ID 等)+ 一些打印机接口。我已经成功地运行了线程,但它们不同步(互斥)
所以问题是我如何实现互斥(当时只有一个人可以打印他的文档数量)
感谢您的关注、时间和提示: )

主班

学生班

监控类

0 投票
1 回答
4041 浏览

python - Python:如何在使用 argparse 的子解析器中拥有互斥组?

我正在编写一个程序,例如:

正如我在运行 task1 时所解释的那样,两者之间--in--out必需的,但不是两者兼而有之。如何将此功能添加到我的程序中?

0 投票
6 回答
32160 浏览

c - 静态变量和线程 (C)

我知道在 C 中的函数内声明一个静态变量意味着该变量在函数调用之间保持其状态。在线程的上下文中,这会导致变量在多个线程上保持其状态,还是在每个线程之间具有单独的状态?

这是我正在努力回答的过去的纸质考试问题:

以下 C 函数旨在用于为其调用者分配唯一标识符 (UID):

解释 get_uid() 在被多个线程调用的环境中以何种方式可能无法正常工作。使用特定的示例场景,详细说明为什么以及如何可能会发生这种不正确的行为。

目前我假设每个线程都有一个单独的变量状态,但我不确定这是否正确,或者答案是否更多地与缺乏互斥有关。如果是这样的话,那么在这个例子中如何实现信号量呢?

0 投票
1 回答
1549 浏览

multithreading - 德克尔算法

我知道dekker算法看起来如何,但为什么这样的东西不起作用?

我的解决方案有什么问题?

0 投票
1 回答
268 浏览

concurrency - Mutex 解决方案中的测试和设置

我正在尝试检查这个互斥体解决方案的正确性,并且需要检查互斥、活性和公平性是否都得到满足。L1 和 L2 是任意代码行。有2个进程同时运行。下面是进程i的代码,j的代码是对称的。

我得到所有三个属性都满意,但我只需要确保我没有错过任何东西。你能找到不满意的房产吗?

0 投票
1 回答
164 浏览

concurrency - 消费者生产者算法的混合解决方案

我试图证明以下生产者/消费者问题的解决方案不起作用,通过显示当消费者处于 M1 的开头时,有一种情况是它无法在有限范围内使项目出队时间,和/或存在一种情况,即生产者处于 L2 的开头,并且它无法在有限时间内将项目入队。我只是找不到任何例子来证明这一点。

该算法假设有 10 个生产者,10 个消费者,缓冲区大小为 10。

制片人

消费者

0 投票
3 回答
2347 浏览

python - 从列表中互斥随机抽样

我无法在不重复任何元素的情况下创建 X 个大小为 Y 的列表。

我一直在使用:

但如果我重复这个,我就会重复。

我希望输出类似于

因为我选择了x = 3(3 个列表)大小y = 2(每个列表 2 个元素)。