thread-safety 相关问题

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

并发队列使用,一个线程入队,另一个线程出队

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

回答 2 投票 0

使用ConcurrentDictionary实现缓存

我正在尝试为 API 创建自己的缓存实现。这是我第一次使用 ConcurrentDictionary,我不知道我是否正确使用它。在测试中,有些东西抛出了错误......

回答 2 投票 0

如果我填充一个字典并将其分配给一个字段 - 我可以保证该字段不会包含一半填充的字典吗?

在下面的代码中,我填充字典的内容,然后将其分配给 Data。因此,我的心理期望是 Data 将包含 null 或包含两个元素的字典。 布...

回答 1 投票 0

Swift 6 迁移:处理可发送上下文中的弱委托

我正在尝试了解 Swift 6 的并发模型,同时迁移一些使用弱委托的代码,并且我希望最大限度地减少更改。假设我有一个如下定义的委托: 原型...

回答 1 投票 0

如何对字典中的集合值进行线程安全替换?

假设我有字典>并且: Task1 尝试替换某个键下的值。 Task2 循环遍历具有相同键值的元素。 这是……

回答 2 投票 0

字典中值的线程安全替换

假设我有字典>并且: Task1 尝试替换某个键下的值。 Task2 循环遍历具有相同键值的元素。 这是……

回答 1 投票 0

这个demo有线程安全问题吗?

我看到一篇关于多线程的帖子,使用了一个易失性变量来模拟信号量,以实现两个线程的交替输出。 下面的代码有线程安全问题吗? 公开课S...

回答 1 投票 0

为什么 GNU GLIBC strsignal() 在现代操作系统上被认为是线程不安全的?

背景 首先,我知道 strsignal() 不是线程安全的一般原因是标准说它可能不是。 strsignal() GNU C 标准库函数在 POSIX 中定义

回答 1 投票 0

在 Rust 中仅使用 Type 和将其包装在 SyncUnsafeCell 中有什么区别?

我知道在没有互斥体的情况下在线程之间共享变量被认为是不好的做法,但我仍然相信它可能具有性能优势。 所以我的问题是两者有什么区别

回答 1 投票 0

glib 线程安全吗?

我在glib文档中找不到任何关于线程安全的信息。 我想这意味着我应该假设它不是线程安全的,但我不确定我有哪些共享资源......

回答 3 投票 0

Go 中的 len(channel) 是线程安全的吗?

一个通道可能被多个 Go 例程使用。使用某些 Go 例程中的 len(channel) 获取通道的长度是线程安全的吗?

回答 2 投票 0

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

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