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

c++ - 是提升 shared_ptr线程安全?

使用 boost shared_ptr 时,以下代码线程安全吗?谢谢!

0 投票
2 回答
1037 浏览

asp.net - ASP.NET 页面中的静态数据 - 线程安全?

这个问题的背景是我需要在(静态)WebMethod 中使用一些用户会话数据。我创建了一个引用我需要的数据的静态属性,如下所示:

然后我可以在我的页面的静态 WebMethod 中调用它。

我的问题是,这种技术线程安全吗?或者这个属性的值是否会随着每个新的页面请求而更新 - 换句话说,它将返回最近请求页面的用户的 UserWebSession?

0 投票
6 回答
29520 浏览

.net - 为什么是列表不是线程安全的?

从以下网站:

http://crfdesign.net/programming/top-10-differences-between-java-and-c

不幸的是,List<>它不是线程安全的(C#ArrayList和 Java Vector是线程安全的)。C# 也有一个Hashtable; 通用版本是:

是什么让List<T>线程不安全?是.NET框架工程师的实现问题吗?还是泛型不是线程安全的?

0 投票
7 回答
81907 浏览

python - Queue.Queue 与 collections.deque

我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以从中读取。

Python 至少有两个队列类,Queue.Queuecollections.deque,前者似乎在内部使用后者。两者都声称在文档中是线程安全的。

但是,队列文档还指出:

collections.deque 是无界队列的替代实现,具有不需要锁定的快速原子 append() 和 popleft() 操作。

我想我不太明白:这是否意味着双端队列毕竟不是完全线程安全的?

如果是这样,我可能无法完全理解这两个类之间的区别。我可以看到 Queue 添加了阻塞功能。另一方面,它失去了一些双端队列特性,比如对 in-operator 的支持。

直接访问内部双端队列对象是

x in Queue().deque

线程安全?

另外,当双端队列已经是线程安全的时,为什么队列要为其操作使用互斥锁?

0 投票
1 回答
937 浏览

c++ - 在CFile对象的写入或读取过程中文件指针可以改变吗

我有一个 CFile 对象,它可以被多个线程访问。有可能一个线程正在向该文件写入数据,而另一个线程正在从该文件中读取数据。我想知道这个政策有什么不安全的地方吗?文件指针可以在写入或读取过程完成之前更改吗?答案是肯定的,如何避免可以同时读写的多线程的不安全性?

非常感谢你!

0 投票
10 回答
7270 浏览

c# - 是列表.Contains() 线程安全调用 - C#

我的理解是,如果你在 C# 中使用通用列表(List),它可以支持多个并发读取器,但只能支持一个写入器。而且,当您将编写器引入组合时,您还必须提供同步构造以使操作线程安全。

List.Contains 是否被视为读取操作?换句话说,如果我调用这个方法,我是否需要担心作者可能会同时写入这个列表?

0 投票
11 回答
3810 浏览

c++ - C/C++ 中的内联函数是一种使它们成为线程安全的方法吗?

我做出以下推理,请告诉我它的错误(或正确):

“如果内联函数在调用函数的地方复制了代码,那么静态变量和局部变量对于调用它的每个函数都会复制,并且如果只有一个线程在运行同时调用内联函数的函数,那么代码是线程安全的”。

“而且,如果它对静态和全局变量没有帮助,那么它对创建临时变量的代码有帮助吗?”

谢谢

0 投票
5 回答
919 浏览

multithreading - 原语同步原语——安全吗?

在受限设备上,我经常发现自己在 2 个线程之间用 2 个布尔值“伪造”锁。每个线程只能由一个线程读取,并且只能由另一个线程写入。这就是我的意思:

当然,在 PC 上我不会这样做,但在受限设备上,读取bool值似乎比获取锁要快得多。当然,sleep(50)当需要更改缓冲区时,我会以较慢的恢复速度(参见“”)进行权衡。

问题——它是完全线程安全的吗?或者在伪造这样的锁时我需要注意哪些隐藏的陷阱?还是我根本不应该这样做?

0 投票
7 回答
19663 浏览

c++ - 线程安全的 C++ 堆栈

我是 C++ 新手,正在编写一个多线程应用程序,不同的编写者将对象推送到堆栈上,而读者将它们从堆栈中拉出(或至少将指针推送到对象)..

是否有任何内置于 C++ 中的结构可以在不添加锁定代码等的情况下处理这个问题?如果没有,那么 Boost 库呢?

编辑:

你好。感谢您最初的精彩回答。我想我认为这可能是内置的一个原因是我纯粹在 x86 空间中思考,并认为指针的 PUSH/POP 应该是指令级别的原子操作。

我不确定我最初的预感是否正确,但我想这不一定在所有平台上都是正确的。虽然如果在 x86 上运行,您是否将原子 PUSH 和 POP 放入堆栈,如果是,这是否实质上使其无锁?

0 投票
4 回答
12685 浏览

c++ - linux 和 gcc 4 中的 C++ 新运算符线程安全

很快,我将开始研究使用共享内存的网格细化算法的并行版本。

该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和 stl 都不是线程感知的。

我搜索了这个问题,答案取决于编译器(有些人试图有点线程感知)和平台(编译器使用的系统调用是否是线程安全的)。

那么,在 linux 中,gcc 4 编译器为 new 运算符生成线程安全代码?

如果没有,克服这个问题的最佳方法是什么?也许将每个呼叫锁定给新的接线员?