问题标签 [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 投票
0 回答
691 浏览

concurrency - 与信号量(Linux 内核)相比,完成轻量级如何?

考虑内核中的一个场景,我们在当前线程之外启动一些活动,然后等待该活动完成。使用信号量可以很好地实现这种同步。但是,使用补全代替被认为是一种好习惯。

为什么在这种情况下完成比信号量更受欢迎?

完成可以被视为条件变量,并且大多数这些都是使用带有包装器的信号量来实现的。这对于 Linux 内核中的补全不是真的吗?

此外,文档说完成比信号量更好更轻量级。完成的实现与增加这些优势的信号量有何不同?

0 投票
1 回答
1302 浏览

c - 为什么 CompareAndSwap 比 TestAndSet 更强大的指令?

请考虑下面的 CompareAndSwap 代码,让我知道为什么这个原子指令比原子 TestAndSet 更强大,因为它是一个互斥原语?

0 投票
2 回答
320 浏览

c - 如何提供一系列交错线程来显示代码中断并且不提供完美同步?

我知道下面的代码做了什么,我知道为什么它是一个损坏的同步代码,因为它只有一个条件变量,而我们需要两个,但我不知道如何提供一系列交错线程来显示它不起作用. 你能用一个例子说明为什么这段代码不能工作吗?

0 投票
3 回答
5860 浏览

algorithm - 两个过程解决算法1

这是两个过程的解决方案算法1:

我明白互斥是满足的。因为当 P0 在临界区时,P1 一直等到它离开临界区。并且在 P0 更新轮换后,P1 进入临界区。我不明白为什么这个算法的进度不满意。

进度是如果没有进程在临界区等待进程应该能够进入临界区而无需等待。

P0 在离开临界区后更新,所以在 while 循环中等待的 P1 应该能够进入临界区。你能告诉我为什么没有进展吗?

0 投票
1 回答
983 浏览

process - 使用信号量解决 N 个进程的临界区

我正在尝试理解信号量的概念,我有以下代码。最初 Semaphore mutex 被初始化为 1

考虑到 N 个进程,上述算法能否很好地解决临界区问题?

我的观察是,前两个条件,即互斥和进步得到满足,但不是有界缓冲区。那是对的吗?

0 投票
4 回答
2237 浏览

c - 为什么 netfilter 挂钩中的关键部分为空,会出现“BUG:原子错误时调度”?

我写了这个钩子:

初始化部分:

我已经定义了静态变量:

由于之间没有代码lockunlock我希望没有错误,但是当我运行这个模块时,内核会产生这些错误:

错误更新:

这是完整的系统日志错误: http: //paste.ubuntu.com/6617614/

0 投票
7 回答
192817 浏览

c++ - std::unique_lock或 std::lock_guard?

我有两个用例。

A. 我想同步访问两个线程的队列。

B. 我想同步两个线程对队列的访问并使用条件变量,因为其中一个线程将等待另一个线程将内容存储到队列中。

对于用例 AI,请参阅使用std::lock_guard<>. 对于用例 BI,请参阅使用std::unique_lock<>.

两者之间有什么区别,我应该在哪个用例中使用哪一个?

0 投票
1 回答
105 浏览

java - 线程不使用 Condition 等待新数据

我正在尝试为实验室编写一些程序,该实验室基本上是一个将数据存储在文件夹中的网络缓存,因此如果客户端想要打开网页,如果该页面不存在,该页面将存储在缓存文件夹中,并且它将显示给客户。我能够下载和显示页面,但是当线程必须等待时出现问题,因为请求的资源正在被下载并存储在缓存文件夹中。

下载类如下:

DownloadsNode 类如下:

缓存类如下:

以前的所有类都从以下类中使用:

有几点需要考虑:

-我必须在每个节点中创建条件变量,以便线程将因此等待并实现打开/关闭锁并保证互斥的方法。

- 如果一个线程正在下载其他线程感兴趣的资源,我使用条件变量等待,并在资源下载并存储在缓存中时说“停止等待”。我在那部分做错了什么?(所有这些都在 MainThread 类中)

-当保证互斥时,我是否必须将同步放在正确的方法中,执行以下方式: -Lock -synchronized(this) 并做我必须做的任何事情 -Unlock 还是我在两种方式都做同样的事情?在管理下载列表和缓存时,我必须建立批评区域,所以我认为有些部分在不需要的方法名称中添加同步,或者我错误地使用了读写锁。

注意:由于我翻译了变量和方法的名称以帮助理解,我可能写了一些不同的东西,但在我的程序中是正确的

非常感谢先进

0 投票
1 回答
706 浏览

multithreading - 三个信号量如何在三个线程的同步执行中工作?

在某个系统中,三个线程的执行是使用三个信号量S1、S2和S3同步的,如下图所示。信号量 S1 和 S2 被初始化为零,而信号量 S3 被初始化为 1。所有三个信号量仅在下面显示的代码部分中使用。

…………

如果变量 x 被定义为一个整数共享变量,初始化为 1,并且在代码的任何其他部分(除了上面显示的部分)没有赋值,那么当所有线程完成执行时,它的值是多少?三个信号量的值是多少?

我正在尝试解决这篇过去的论文,以便为我的操作系统考试做准备。我不明白如何修改变量 x 以及三个信号量如何协同工作。如果有人可以逐步向我展示信号量如何协同工作以及如何修改变量,我将不胜感激。

如果您有任何其他类似的示例可以练习,请不要犹豫链接它。

0 投票
1 回答
156 浏览

java - 在线程获取之前调用释放

我正在编写一个多线程的小程序,我正在使用信号量来强制互斥。但是一个问题触发了我的头脑。

如果Semaphore.release之前调用会发生什么Semaphore.acquire

我的工作正常。这是不好的做法还是可以?