thread-safety 相关问题

如果一段代码仅以允许多个线程一致执行此代码的方式操作数据结构,则它是线程安全的。代码可以是线程安全的,有条件安全的(需要互斥)或不安全(只能由一个线程安全使用)。

线程安全原子生产者/消费者

我有一个应用程序,它利用生产者/消费者模式来处理事件(总共 2 个线程)。主(UI)线程原子地写入引用类型字段,而我的实例化线程原子......

回答 1 投票 0

插入独立键时的 C++ unordered_map 线程安全性

C++ 容器线程安全指南,位于 http://en.cppreference.com/w/cpp/container#Thread_safety 说 同一个容器中的不同元素可以被不同线程并发修改 ...

回答 1 投票 0

使用工厂构建单例对象

我正在尝试使用工厂创建一些单例对象: 公共类 MyObjectFactory { 私有 MyObject myObject; 公共 MyObject getInstance(boolean newInstance) { 如果(新Insta...

回答 2 投票 0

为什么在 Rust 中为 RwLockReadGuard 和 RwLockWriteGuard 实现 !Send 特征?

我最近在尝试使用 RwLock 返回的“Lock Guards”创建并行系统时遇到了问题。由于我的系统的架构设计,我需要存储这些锁。 ...

回答 1 投票 0

Java中的“this”如何转义构造函数?

我听说过由于对象构造不正确而在非线程安全代码中发生这种情况,但我真的没有这个概念,即使在阅读了 Goetz 书中的内容之后也是如此。我想索...

回答 8 投票 0

以线程安全的方式使用std::ios_base::pword()?

我想使用 pword() 来存储任何流的附加对象,但是以线程安全的方式,特别是第一次为给定流分配对象的一个实例。 ...

回答 1 投票 0

std::atomic 变量上的分支是否可能是错误来源?

我听说在 std::atomic 上使用 if 或 switch 是错误的来源,因为一些与内存排序有关的参数 具体来说,代码如下: 无效第二个线程函数(){ put(“从第二个开始

回答 1 投票 0

在线程中获取WebView2的HTML文档

该函数应该获取 HTML 文档,在线程上工作。 ExecuteScriptAsync 需要管理一个任务,如果我在单独的线程上运行它,则会导致执行错误。我不知道如何获得...

回答 2 投票 0

实时系统中的线程安全数据传输架构(C语言)

简短: 我有一个负责与设备通信的模型。该模型有两个线程:一个用于通信(读取和写入),另一个用于记录结果。使用

回答 1 投票 0

C Pthreads - 线程安全队列实现的问题

我是多线程新手,我正在尝试实现一个简单的线程安全任务队列,其中每个线程都可以从中提取工作,直到没有更多任务为止。 ...

回答 2 投票 0

DispatchQueue.global().sync 方法上的数据竞赛崩溃

我的代码非常简单。 我的理解是删除操作应该是线程安全的,因为我用queue.sync包装 让队列 = DispatchQueue.global() var fetchingInProgressList:设置 我的代码非常简单。 我的理解是 remove 操作应该是线程安全的,因为我用 queue.sync 换行 let queue = DispatchQueue.global() var fetchingInProgressList: Set<String> = [] tl;博士 不,您不能使用全局队列进行线程安全同步。不过,一个简单的串行队列就可以。或者,现在,在 Swift 并发中,我们可能会找到一个“演员”。 但是全局队列不足以实现线程安全。 如前所述,global返回一个并发队列。正如文档所说: 提交到返回队列的任务是相互并发调度的。 并且 sync 同步调用它: 该函数将一个块提交到指定的调度队列以同步执行...该函数直到该块完成后才返回。 因此,sync将阻塞调用者,直到分派的工作完成(即,它“同步”运行)。但是,sync 对与同一并发队列交互的其他线程没有影响。分派到同一全局队列的工作可以与其他线程分派的工作并行运行。这违反了线程安全。这些不同的线程使用 sync 还是 async 都无关紧要。相关问题是队列是否可以阻止竞争,即阻止该队列上的并行执行。全局队列不提供这样的保证。 因此,简而言之,调度到全局队列(无论是同步还是异步)不足以实现线程安全。有两种传统技术可以通过 GCD 实现线程安全: 使用串行调度队列而不是并发队列。这样,读取和写入都不会彼此同时发生。 在调度写入时使用“屏障”。这称为“读者-作者”模式。但是您不能在全局队列上使用屏障,因此您只能在您自己的私有/自定义并发队列上执行此操作。 (FWIW,虽然读者-作者具有一定的直观吸引力,但我已将其从我的代码库中退休:需要代码清晰度和可维护性的地方有更好的模式。在那些罕见的计算密集型情况下,性能再次成为最重要的考虑因素,还有更好的选择。) 无论您选择上述哪一个,下一个问题是您是同步调度(sync)还是异步调度(async)。这取决于调用者是否必须等待分派的工作完成。例如,如果只是写入数据,我们可以使用 async 异步执行。但是,如果读取数据,我们显然必须使用 sync 同步执行此操作。 综上所述,如今,有了 Swift 并发性,我们会考虑使用 actor。 WWDC 视频中讨论了 Actor 使用 Swift Actor 保护可变状态和使用 Swift Concurrency 消除数据争用。

回答 1 投票 0

Mutex.TryOpenExisting() 是线程安全的吗?

我使用Mutex.TryOpenExisting()。我想知道线程安全吗? 公共类 MutexNamedSystemDemo { 私有 const string _mutexName = @"Global\{C7F2DE44-8927-4B01-B8E1-D8F158A483A8}"...

回答 1 投票 0

为什么我的 PyQt5 和 Vispy 应用程序仅在 QThread 循环中添加睡眠时更新 GUI?

基本上我正在尝试使用 Vispy 库实现一个用于实时数据可视化的 PyQt5 应用程序。在下面的代码中,我尝试绘制每秒 10000 个样本的正弦波......

回答 1 投票 0

原子值更改时线程任务不退出

我面临的问题是,当我在控制台中键入“exit”时,应用程序不会退出。它卡在以下线程中: 无效服务器::handleClientConnections(int

回答 1 投票 0

为什么读取不是线程安全的?

我想知道为什么从内存中读取不是线程安全的。到目前为止我所看到的,尤其是这个问题,从内存中读取似乎不是线程安全的。 我一直在用 Python 编码......

回答 4 投票 0

Java 中线程安全的循环缓冲区

考虑一些并行运行的 Web 服务器实例。每个服务器都拥有对单个共享“状态守护者”的引用,其作用是保留来自所有服务器的最后 N 个请求。 例如(...

回答 9 投票 0

使用按钮标签

假设程序逻辑根据随机内容更改按钮标签 - 但使用 UI 线程。 按钮标签值在点击事件中使用可靠吗?即,它的值是否与 ... 时的值相同

回答 1 投票 0

为什么 SpringApplicationBuilder.run 是线程安全的?

以下代码来自Spring Boot SpringApplictionBuidler。我知道它使用双重检查来实现线程安全。问题是,有必要让run方法线程安全吗?...

回答 1 投票 0

lua_continuation、lua_thread 函数

尝试在lua 5.4中编写以下代码 静态 int foreach(lua_State *L){ luaL_checktype(L, 1, LUA_TTABLE); luaL_checktype(L, 2, LUA_TFUNCTION); lua_getglobal(L, "打印"); 我...

回答 1 投票 0

使用 std::atomic<uint8_t>

我正在尝试在结构中使用 std::atomic,期望涉及在多线程环境中存储和加载值的操作将是线程安全的。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.