问题标签 [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.
android - 如何实现一个好的Android全局对象,将数据从后台线程实时传递到Activity,不会死锁?
@Jusit 建议我使用全局对象将数据从后台线程传递到活动并且它有效。但现在我担心死锁,以及是否有避免/防止它的好方法。此外,我不确定我选择 String 作为全局对象是否如此好。这是我目前所做的解释。
实际上,全局对象只是在 Blueterm.java 中创建的一个公共静态变量,如下所示:
所以 strData 我想我的全局对象是由后台线程创建和写入的,如下所示:
我的目的是让 strRead 在我的绘图活动正在读取它时防止 strData 被覆盖。strWrite 阻止我的绘图活动在写入 strData 时读取它,如下所示:
您可以看到 strData 在绘图活动通过读取后被重置为空字符串。
当我的手机没有连接到 USB 调试时,我经历了强制关闭,所以我不确定是什么导致了强制关闭。从那以后就没有发生过。
有什么建议可以在没有死锁的情况下实现并发吗?我已经阅读了有关互斥(信号量、锁、互斥锁)的信息,但我不确定应该使用哪个。另外,也许我选择 String 作为全局对象是一个不好的选择,因为我想要实时数据传输。那就是我不希望线程阻塞等待活动完成阅读。而且我不希望等待后台线程完成写入的活动被阻塞。我可以摆脱 String 并实现/使用 FIFO 缓冲区,不是吗?
wpf - 当 `SelectedIndex` 大于 0 时触发
如何在A上设置一个触发器,该触发器ComboBox
大于SelectedIndex
0(基本上选择选项时)ComboBox
会进行修改。我拥有的是两个ComboBox
es,但用户只能从其中一个中选择。因此,如果我从 A 中选择第一个选项,ComboBox
则ComboBox
B 应该得到 aSelectedIndex
的 0 ,反之亦然。
我尝试过以下操作,但不确定如何捕获所需的逻辑。
我应该看什么样的触发器?
c++ - 彼得森在共享内存中的锁定问题
我已经实现了共享内存中互斥的彼得森算法。我在 c++ 和 java 进程(使用 jni)之间使用共享内存进行通信。问题是我仍然以某种方式看到了比赛条件。如果我尝试使用 printf/println 对其进行调试,代码开始运行良好,但是一旦我删除这些打印,进程就会停止。有人可以告诉我问题出在哪里吗?我很确定彼得森算法的实现是正确的。我应该使用 semaphores(semget()) 代替互斥吗?
concurrency - 并发访问对象组
我正在尝试开发一个由线程池组成的应用程序,使用工作窃取算法同时执行任务。
这些任务
- 访问一组预定义的对象;
- 必须在实际运行之前“原子地”获取它访问的所有对象的读/写权限;
- 完成后(并保证最终完成)释放他们获得的对象。
解决此问题的一种可能方法是让每个线程一次执行一项任务,然后尝试使用预定义的顺序锁定每个对象。如果至少有一个失败,则释放所有锁,然后继续执行另一项任务。
然而,这种方法增加了具有大对象依赖性的任务饥饿的可能性,甚至可能导致活锁。
是否有另一种方法可以在最大化并发的同时获取一组锁?(没有全局锁)或者可能以不再需要的方式更改系统?如果是这样,有什么好的论文吗?
ps:正如 thiton 回答的那样,这是“哲学家就餐”问题的广义版本。我正在寻找非集中式解决方案,特别是在高负载(添加和删除任务)中表现良好的算法。
coldfusion - CFLOCK 中的 CFRETURN 是否正确释放锁?
我正在编写一些带有 CFLOCK 标签的代码,并且我的代码将在 CFLOCK 中的某个地方返回。例子:
如果 CFRETURN 触发,锁会被释放,还是我需要以其他方式处理我的代码?
locking - 使 pthread_rwlock_wrlock 递归
我对 pthread 函数pthread_rwlock_wrlock的行为有疑问。上面链接的规范指出,当一个线程锁定写锁并且同一个线程再次锁定它时,它会导致未定义的行为(我实际上可以观察到这一点,在 x86 Linux 上调用此函数是一个 noop 而在 PowerPC Linux 上它停止线程)。
我需要的行为是具有以下特征的读写锁:
- 在以下情况下,线程的读锁定成功:
- 锁没有被任何线程持有
- 该锁仅被零个或多个线程(包括调用线程)读锁定,并且可能被调用线程读或写锁定
- 写锁定在以下情况下成功:
- 锁不被任何其他线程持有
- 只有当前线程持有锁(用于读取或写入)
使用 a pthread_mutex_t
,可以通过初始化标志来控制锁的递归性,但这对于 是不可能的pthread_rwlock_t
。
我有哪些选择?我实际上从来没有在 C 中实现这种并发原语,我认为我在这里缺少一些明显的解决方案。
semaphore - 违反非原子等待的互斥 - 信号量
我正在做一个“操作系统”主题,但我无法理解这一点:
我们被要求演示如果不以原子方式处理等待,如何违反互斥。(信号量实现)
现在,我看到这可能会导致计数不正确,导致程序认为它拥有比实际更多的可用资源,
但我似乎无法理解这将如何违反互斥:(
任何人都可以阐明或指出我正确的方向吗?
c++ - std::tr1::shared_ptr 是否互斥?
我有一个包含 a BYTE*
、一个引用计数器和 a的类,CRITICAL_SECTION
它保护它们免受并发访问。
我想用std::tr1::shared_ptr<BYTE>
. MSDN说:
多个线程可以同时读取和写入不同的 shared_ptr 对象,即使这些对象是共享所有权的副本。
一切听起来都很好,直到我发现CRITICAL_SECTION
from 类在它之外被用来“锁定”它并以互斥的方式改变它的内容。好的,它破坏了封装,我想改变它。
我知道shared_ptr
保证内存会被释放,但是写内存时能保证互斥吗?
c# - C# Web 服务互斥
elI 有两种类型的节点。一个是协调器,另一个是工作节点。
它们通过 SOAP 进行通信。
所有工作节点都向协调器发送请求以获得互斥的数据库记录。
我希望协调员将安全记录的 ID 返回给每个工作人员,这样没有工作人员需要处理相同的记录。
我知道如何使用互斥锁对 C# 中的线程做类似的事情,但我想知道同步 Web 服务调用的最佳实践。
编辑:这是我遇到的问题
sql - SQL 避免基于 LIKE 表达式多次求和行
我有一张银行交易表,其中包含 id、tDate、description、cashOut、cashIn 列。我想看看我是如何花钱的,特别是在亚马逊和一家名为 Mazo 的商店,所以我想要这样的结果:
我试过这个:
但是,我得到了以下信息:
这个 SQL 查询的问题是“mazo”事务的总和是错误的,因为它也将“amazon”事务相加。
我希望交易的选择总和是互斥的或类似的东西,以便每个交易只是上述 SUM 之一的一部分(不诉诸 PHP 或类似的东西)。(我的表格包含比这更多的数据,而且我有很多搜索条件,所以使用 '% mazo %' 作为搜索词是不够的。我需要一个通用的解决方案。)
有人有建议吗?
表格及其数据的详细信息: