问题标签 [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.

0 投票
3 回答
4715 浏览

c# - .Net 线程安全中的静态字典

阅读字典的msdn 文档时说:“这种类型的公共静态(在 Visual Basic 中共享)成员是线程安全的。不保证任何实例成员都是线程安全的。”

这意味着使用这样的字典:

不需要做类似下面的代码的事情吗?

0 投票
8 回答
24959 浏览

c++ - C++ 线程安全映射

有谁知道我在哪里可以找到包装 astd::map并使其线程安全的暗示?当我说线程安全时,我的意思是它只提供对映射的串行访问,一次一个线程。理想情况下,此地图应仅使用标准库和/或增强结构。

0 投票
11 回答
88725 浏览

c# - 多参数线程

有谁知道如何将多个参数传递给 Thread.Start 例程?

我想过扩展这个类,但是 C# Thread 类是密封的。

这是我认为代码的样子:

顺便说一句,我用不同的编排器、平衡和端口启动了许多线程。请考虑线程安全。

0 投票
9 回答
10052 浏览

c# - 是否可以使用无锁(等待)双向链表?

用 C# 标签问这个问题,但如果可能的话,应该可以用任何语言。

是否可以使用互锁操作实现双向链表以提供无等待锁定?我想插入、添加和删除,无需等待即可清除。

0 投票
6 回答
3774 浏览

python - 这种 Python 生产者-消费者无锁方法是线程安全的吗?

我最近编写了一个使用简单生产者/消费者模式的程序。它最初有一个与不正确使用 threading.Lock 相关的错误,我最终修复了该错误。但这让我思考是否有可能以无锁的方式实现生产者/消费者模式。

我的要求很简单:

  • 一个生产者线程。
  • 一个消费者线程。
  • 队列只能放置一项。
  • 生产者可以在当前项目被消耗之前生产下一个项目。因此,当前项目丢失了,但这对我来说没关系。
  • 消费者可以在生产下一个项目之前消费当前项目。因此,当前项目被消耗了两次(或更多),但这对我来说没关系。

所以我写了这个:

我的问题是:这段代码是线程安全的吗?

立即评论:这段代码并不是真正无锁的——我使用 CPython,它有 GIL。

我对代码进行了一些测试,它似乎可以工作。它转换为一些由于 GIL 而具有原子性的 LOAD 和 STORE 操作。但我也知道当 x 实现方法del x时操作不是原子的。__del__因此,如果我的项目有一个__del__方法并且发生了一些令人讨厌的调度,事情可能会中断。或不?

另一个问题是:我必须施加什么样的限制(例如对生产项目的类型)才能使上述代码正常工作?

我的问题只是关于利用 CPython 和 GIL 的怪癖以提出无锁(即没有像 threading.Lock 这样的锁在代码中显式)解决方案的理论可能性。

0 投票
12 回答
68687 浏览

c - malloc 线程安全吗?

函数是malloc()可重入的吗?

0 投票
3 回答
47017 浏览

c - 线程安全与可重入

最近,我问了一个问题,标题为“malloc线程安全吗?” ,在里面我问,“malloc 是可重入的吗?”

我的印象是所有可重入都是线程安全的。

这个假设是错误的吗?

0 投票
1 回答
3474 浏览

.net - SQLite.Net 线程安全吗?

我问的是 .Net 实现 - System.Data.SQLite。是否有以线程安全方式使用它的指南?

我知道 SQLite 本身可以在有或没有线程安全的情况下编译- 但 System.Data.SQLite 是如何编译的?

0 投票
2 回答
5525 浏览

java - Java:ServerSocket.accept 是线程安全的吗?

对于学校的一个项目,我们正在用 Java 5.0 制作一个多线程服务器。该项目以服务器的并发方面为中心。

我们有一些线程专门用于处理请求。为此,他们调用 ServerSocket.accept() 来接受新连接。我们的选择是启动一堆它们,让它们以两个线程不能同时接受()同一个连接的假设来处理传入的连接。

但现在主要的问题是我们在 API 中找不到任何东西来保证我们的这种行为(或者我们看起来不正确),除了“它有效”的证明之外,我们什么也没有。

有没有人在java方法上寻找这种信息的来源?

0 投票
2 回答
1116 浏览

multithreading - 访问 TObjectList 线程的不同索引是否安全?

我有一个 TObjectList 需要由多个线程处理。由于内部 TObjectList 从 TList 继承,而 TList 将其内部实现为数组,我想知道:

只要我们访问不同的索引,从不同的线程访问数组是否是线程安全的?

例如,有一个名为 myObjectList 的 TObjectList:

开始 = 0; end = myObjectList.Count div 2;

线程1:

线程2: