mutex 相关问题

互斥(“互斥”)是一种在多个线程同时访问(特别是更改)相同数据或资源时确保完整性的机制。

无法使用书中的例子模拟死锁。

我正在看《Go中的并发性。开发者的工具和技术",作者是Katherine Cox-Buday,我被一个非常简单的例子卡住了,这个例子是为了模拟死锁。这个片段是这样的。...

回答 1 投票 0

为什么Rust RwLock和fork一起使用时会有意外的行为?

当我使用RwLock和fork时,我看到了一些我无法解释的行为。基本上,子进程报告RwLock仍在获取中,而父进程则没有,尽管它们都运行着相同的代码......。

回答 1 投票 2


用C语言封装线程API

我想用C语言封装线程API,我将存储值,并通过FIFO将其发送到其他程序我的问题是,我不明白为什么它使段故障。我刚刚做了打印.......

回答 1 投票 0

在C语言中,跨进程的Cond等待和信号

我试图用进程(熊-蜂蜜-蜜蜂)复制一个简单的生产者-消费者问题。到目前为止,我能够同步的蜜蜂,所以只有一个生产蜂蜜的时间。然而,当它来到...

回答 1 投票 0

除了交换和移动之外,不允许使用mutexes的类。

一般来说,声明一个交换和移动noexcept是一个很好的做法,因为这样可以提供一些异常保证。同时,编写一个线程安全的类通常意味着添加一个mutex ...

回答 1 投票 0

Golang defer有时会失败

我正在做一个有多个例程的应用程序。处理器接收一个ID(字符串)并执行一些操作。这些ID可能是重复的,我不希望多个例程处理一个......

回答 1 投票 0

长期锁定一个mutex是否安全?

有一组问题是,mutexes本身(没有条件变量等额外的东西)可以用来同步线程。例如,假设我想让一个后台线程......。

回答 1 投票 1

我如何在路由函数之间传递一个var,并在每个控制器中改变它?

我想在gin中的路由函数之间用mutex传递var,那么我怎么做呢? in router.go var test []string func NewRouter() *gin.Engine{ gin.SetMode(gin.ReleaseMode) r := gin...。

回答 0 投票 -1

如何降低使用std :: condition_variable时生产者获得锁而消费者无法获得锁的可能性?

如何降低生产者(即下面代码片段代码中的主线程)获得锁而消费者(即等待线程)无法获得锁的可能性?可能是...

回答 2 投票 0

具有死锁和饥饿的哲学家

这是使用信号量解决geeksforgeeks餐饮哲学家问题的解决方案:#include #include #include #include #include 好吧,首先,我所知的关于餐饮哲学家问题的最佳解决方案是这个(来自现代操作系统-Tannebaum和Bos的第四版): #define TRUE 1 #define N 5 #define LEFT (i+N-1)%N #define RIGHT (i+1)%N #define THINKING 0 #define HUNGRY 1 #define EATING 2 typedef int semaphore; int state[N]; semaphore mutex = 1; semaphore s[N]; void philosopher(int i){ while(TRUE){ think(); take_forks(i); eat(); put_forks(i) } } void take_forks(int i){ down(&mutex); state[i] = HUNGRY; test(i); up(&mutex); down(&s[i]); } void put_forks(i){ down(&mutex); state[i] = THINKING; test(LEFT); test(RIGHT); up(&mutex); } void test(int i){ if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING){ state[i] = EATING; up(&s[i]); } } 为了简单起见,当然省略了原型和一些功能,但是要点是,如果您要创建一个完全不安全的餐饮哲学家,解决方案就是这样的想法: #define N 5 void philosopher(int i){ while(TRUE){ think(); take_fork(i); take_fork((i+1)%N); eat(); put_fork(i); put_fork((i+1)%N); } } 说明:该程序将很容易产生竞争状态,实际上两个哲学家将使用相同的分叉,这是因为我们不使用信号量等待轮到我们吃饭,它也将产生饥饿,因为我们不使用test()检查是否有人已经使用了我们的fork,因此如果您要修改程序以解决此问题,则应删除test()以及使用过信号灯和所有测试的所有代码段。

回答 1 投票 2

由于互斥锁,线程正在等待信号,但从未得到它

所以我正在编写一个具有1个主线程(我的main)的程序,该程序创建了一个主线程。第二个应该等待一个信号然后运行。主要等待当然会加入。我在理解时遇到问题...

回答 1 投票 0

为什么std :: mutex既不可复制又不可移动?为什么std :: mutex的复制ctor应该标记为已删除?如果不是,是否有任何潜在的问题?

有人能说出std :: mutex既不可复制又不可移动的原因?有人告诉我,这与避免资源浪费有些关系。为什么std :: mutex的副本ctor应该是...

回答 2 投票 1

为什么std :: mutex既不可复制又不可移动?为什么std :: mutex的复制ctor应该标记为已删除?如果不是,是否有任何潜在的问题?

有人能说出std :: mutex既不可复制又不可移动的原因?有人告诉我,这与避免资源浪费有些关系。

回答 2 投票 0

std :: cout来自多个线程

我有一个应用程序,其中我在并行工作线程中执行昂贵的计算。为简单起见,我直接从这些线程将结果写入stdout。直到我更改了一些...为止,此方法都很好...

回答 1 投票 1

如何让N个线程运行特定代码而又不会出现数据竞争错误?

i具有以下问题:N进程锁定器是一种同步机制,它允许N个线程(其中N是固定数)等待所有线程都达到某个点。全部...

回答 1 投票 0

使用不可移动,不可复制的对象初始化unique_ptr

我有一个类,需要将其存储在unique_ptr的向量中。但是,我看到的是C2664错误,如下所示:“ AffinityThreadGroup :: AffinityThreadGroup(AffinityThreadGroup &&)无法转换...

回答 1 投票 0

原子采集是否与互斥锁释放同步?

我有一个对象,该对象将一些设置存储在具有字符串键和变量值的unordered_map中。由于我的库可能会在多个线程中使用,因此读取很有可能会超出......>

回答 1 投票 0

何时使用MCS锁

我一直在阅读有关MCS锁的信息,我觉得这很酷。现在,我知道它是如何实现的,下一个问题是何时使用它。以下是我的想法。请随时将项目添加到...

回答 2 投票 3

互斥量的锈访问选项

我在理解如何修改互斥对象中的Option时遇到了麻烦。当没有选项时,它可以正常工作let mut my_int = Arc :: new(Mutex :: new(5));让my_int_clone = Arc :: clone(&my_int); ...

回答 1 投票 0

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