问题标签 [thread-safety]
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.
c# - .Net 线程安全中的静态字典
阅读字典的msdn 文档时说:“这种类型的公共静态(在 Visual Basic 中共享)成员是线程安全的。不保证任何实例成员都是线程安全的。”
这意味着使用这样的字典:
不需要做类似下面的代码的事情吗?
c++ - C++ 线程安全映射
有谁知道我在哪里可以找到包装 astd::map
并使其线程安全的暗示?当我说线程安全时,我的意思是它只提供对映射的串行访问,一次一个线程。理想情况下,此地图应仅使用标准库和/或增强结构。
c# - 多参数线程
有谁知道如何将多个参数传递给 Thread.Start 例程?
我想过扩展这个类,但是 C# Thread 类是密封的。
这是我认为代码的样子:
顺便说一句,我用不同的编排器、平衡和端口启动了许多线程。请考虑线程安全。
c# - 是否可以使用无锁(等待)双向链表?
用 C# 标签问这个问题,但如果可能的话,应该可以用任何语言。
是否可以使用互锁操作实现双向链表以提供无等待锁定?我想插入、添加和删除,无需等待即可清除。
python - 这种 Python 生产者-消费者无锁方法是线程安全的吗?
我最近编写了一个使用简单生产者/消费者模式的程序。它最初有一个与不正确使用 threading.Lock 相关的错误,我最终修复了该错误。但这让我思考是否有可能以无锁的方式实现生产者/消费者模式。
我的要求很简单:
- 一个生产者线程。
- 一个消费者线程。
- 队列只能放置一项。
- 生产者可以在当前项目被消耗之前生产下一个项目。因此,当前项目丢失了,但这对我来说没关系。
- 消费者可以在生产下一个项目之前消费当前项目。因此,当前项目被消耗了两次(或更多),但这对我来说没关系。
所以我写了这个:
我的问题是:这段代码是线程安全的吗?
立即评论:这段代码并不是真正无锁的——我使用 CPython,它有 GIL。
我对代码进行了一些测试,它似乎可以工作。它转换为一些由于 GIL 而具有原子性的 LOAD 和 STORE 操作。但我也知道当 x 实现方法del x
时操作不是原子的。__del__
因此,如果我的项目有一个__del__
方法并且发生了一些令人讨厌的调度,事情可能会中断。或不?
另一个问题是:我必须施加什么样的限制(例如对生产项目的类型)才能使上述代码正常工作?
我的问题只是关于利用 CPython 和 GIL 的怪癖以提出无锁(即没有像 threading.Lock 这样的锁在代码中显式)解决方案的理论可能性。
c - malloc 线程安全吗?
函数是malloc()
可重入的吗?
.net - SQLite.Net 线程安全吗?
我问的是 .Net 实现 - System.Data.SQLite。是否有以线程安全方式使用它的指南?
我知道 SQLite 本身可以在有或没有线程安全的情况下编译- 但 System.Data.SQLite 是如何编译的?
java - Java:ServerSocket.accept 是线程安全的吗?
对于学校的一个项目,我们正在用 Java 5.0 制作一个多线程服务器。该项目以服务器的并发方面为中心。
我们有一些线程专门用于处理请求。为此,他们调用 ServerSocket.accept() 来接受新连接。我们的选择是启动一堆它们,让它们以两个线程不能同时接受()同一个连接的假设来处理传入的连接。
但现在主要的问题是我们在 API 中找不到任何东西来保证我们的这种行为(或者我们看起来不正确),除了“它有效”的证明之外,我们什么也没有。
有没有人在java方法上寻找这种信息的来源?
multithreading - 访问 TObjectList 线程的不同索引是否安全?
我有一个 TObjectList 需要由多个线程处理。由于内部 TObjectList 从 TList 继承,而 TList 将其内部实现为数组,我想知道:
只要我们访问不同的索引,从不同的线程访问数组是否是线程安全的?
例如,有一个名为 myObjectList 的 TObjectList:
开始 = 0; end = myObjectList.Count div 2;
线程1:
线程2: