thread-safety 相关问题

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

X509Certificate2 类是线程安全的吗?

告诉我 X509Certificate2 类是线程安全的吗?有条件的话,我可以这样使用它: 公开课我的班级 { // 例子 私有静态只读 X509Certificate2 staticCertInstance = ...

回答 2 投票 0

非同步WeakHashMap有害吗?

我有一个类似这样的代码。 私有静态地图模式; 私人静态地图模式(){ 如果(模式==空){ 模式 = 新的 WeakHas...

回答 2 投票 0

枚举方法线程安全

我在本文中发现了“默认情况下枚举的单例实现是线程安全的”这一概念。 如果是这种情况,那么这是否意味着我编写的任何方法......

回答 1 投票 0

我在无锁的SPSC中发现了一个奇怪的现象

我尝试使用无锁技术实现 SPSC,但遇到了奇怪的分段错误。代码如下: #包括 #包括 #包括 #包括 我尝试使用无锁技术实现 SPSC,但遇到了奇怪的分段错误。代码如下: #include <iostream> #include <thread> #include <vector> #include <atomic> #define MATTER_NUM 10000 #define BUF_LEN 1024 uint64_t RingBuffer[BUF_LEN]; //uint32_t m_buffer[BUF_LEN]; std::atomic<uint64_t> head(0); std::atomic<uint64_t> tail(0); bool Push(const uint64_t &data) { uint64_t tmp_tail = tail.load(std::memory_order_relaxed); if ((tmp_tail + 1) % BUF_LEN == head.load(std::memory_order_acquire)) return false; RingBuffer[tmp_tail + 1] = data; tail.store((tmp_tail + 1) % BUF_LEN, std::memory_order_release); return true; } bool Pop(uint64_t &data) { static uint64_t cnt = 0; uint64_t tmp_head = head.load(std::memory_order_relaxed); if (tmp_head == tail.load(std::memory_order_acquire)) return false; data = RingBuffer[tmp_head]; head.store((tmp_head + 1) % BUF_LEN, std::memory_order_release); cnt = (tmp_head + 1) % BUF_LEN; return true; } int Producer() { for (int i = 0; i < MATTER_NUM; i++) { while (!Push(i)); } return 0; } int Consume() { for (int i = 0; i < MATTER_NUM; i++) { uint64_t data = -1; while (!Pop(data)); std::cout << data << std::endl; } return 0; } int main() { std::thread t1(Producer), t2(Consume); t1.join(); t2.join(); return 0; } 有一个奇怪的现象。当我取消第10行中的注释“uint32_t m_buffer[BUF_LEN]”时,代码神奇地正常运行!我不明白为什么会发生这种情况。 内置 g++ (GCC) 7.5.0: g++ -std=c++11 -pthread main.cpp && ./a.out RingBuffer[tmp_tail + 1] = data; - 不需要 %BUF_LEN 吗?看来您偶尔会出现缓冲区溢出的情况。

回答 1 投票 0

MFC OnTimer 事件中 CWinThread 的潜在内存泄漏和性能问题

我是一名使用 MFC 的新开发人员,我有一个关于 CWinThread 的问题。我有一个 OnTimer 事件来检查所有轴的位置值是否为 0。此外,我有一个函数

回答 1 投票 0

如何制作一个线程安全的日志处理程序子类来触发主 Qt 循环中的事件?

我有一个使用线程和日志记录的 PySide6 应用程序。我的记录器在下面定义了一个自定义处理程序,它会弹出一个消息框,需要用户注意更高级别的日志记录事件: ...

回答 1 投票 0

使用 tcp 套接字发送和接收字符串的线程安全函数

我需要一个线程安全的函数,它可以创建一个 tcp 套接字,也可以使用一个预连接的 tcp 套接字向服务器发送和接收字符串。这个字符串实际上是 linux shell 命令和 ret...

回答 1 投票 0

pthreads:如何处理创建其他线程的主线程中的信号? (具体代码可见)

我有一个主线程,它保留在 main 函数中,即我没有像 pthread_create 那样专门创建它,因为它没有必要。该线程打开一个文件,然后创建其他线程,...

回答 2 投票 0

@JpaRepository中的查询sql线程安全吗?

您好,我是java语言新手,我必须创建每次单击都会将某个值加一的方法,我正在使用JPA repo和java 21。问题是我的方法中的线程安全性。我的初始化...

回答 1 投票 0

有没有办法避免此实现中的“静态生命周期要求”?

我正在尝试更好地理解 Rust 中的并发性。我得到了以下任务: Looper 是反应式中经常使用的范例。创建时,Looper 会创建一个通用消息对象队列...

回答 1 投票 0

从多个线程调用 `std::shared_future<T>::wait`

cppreference 明确关于从多个线程调用 std::shared_future::wait : 从多个线程调用同一个 std::shared_future 的 wait 是不安全的;预期用途是

回答 1 投票 0

FrozenDictionary<TKey,TValue> 在 .NET 8 中线程安全吗?

我有一个非常简单的问题: 从不同线程同时读取 FrozenDictionary 实例是否安全? 我认为这种类型是线程安全的,因为它是imm...

回答 1 投票 0

并发队列使用

有一个简单的问题。 如果一个线程正在排队而另一个线程正在出队,我是否必须使用并发队列?在这种情况下使用常规容器是否存在任何竞争条件/其他风险(1 ...

回答 2 投票 0

C#并发队列使用

有一个简单的问题。 如果一个线程正在排队而另一个线程正在出队,我是否必须使用并发队列?在这种情况下使用常规容器是否存在任何竞争条件/其他风险(1

回答 2 投票 0

在 C# 中使用布尔标志来停止线程运行是否安全?

我主要关心的是布尔标志......在没有任何同步的情况下使用它是否安全?我在几个地方读到它是原子的(包括文档)。 我的任务类 { 私人

回答 4 投票 0

C# .NET Core 方法执行多次 - 创建多个线程

上下文 我从 Javascript 对控制器进行 ajax 调用以更新实体“Owner”。控制器使用服务来处理请求,并相应地更新实体。在

回答 1 投票 0

这个函数可能会导致线程无限期等待吗?

我正在阅读flutter引擎中的代码 https://github.com/flutter/engine/blob/main/shell/common/platform_view.cc#L58 我想问如果latch.Signal()先于latch.Wait()到达,会不会...

回答 1 投票 0

与另一个线程共享对象而不使用“move”

如何安全地将此response.audio_file共享到不同的线程? 线程::生成(移动 || { 准备结果文件(&response.audio_file); }); //prepare_result_files(&response.audio_file).

回答 1 投票 0

为什么我的Python/C++代码使用Pybind11进行多线程会导致死锁?

我正在开发一个 Python 项目,出于性能原因,我需要将一些计算卸载到 C++。我正在使用 Pybind11 在 Python 和 C++ 之间建立桥梁。在我的场景中,我正在尝试运行 mu...

回答 1 投票 0

Var 'xxx' 不是并发安全的,因为它是非隔离的全局共享可变状态;这是 Swift 6 中的错误

我使用了一些全局变量,只有Integer,可以从多个线程访问。正常情况下只有一个线程写入该变量,但其他线程读取它们。 var xxx:整数...

回答 1 投票 0

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