首页 文章
  • 0 votes
     answers
     views

    生产环境 者 - 消费者队列中的奇怪死锁

    使用C的pthread库,我正在尝试实现一个简单的 生产环境 者 - 消费者模式 . 生产环境 者生成随机数并将它们放入这样的队列中 typedef struct { int q[MAX_QUEUE]; int head; int tail; } queue; 消费者只需逐个获取数字并将其打印到标准输出 . 使用一个 mutex 和两个条件变量完成同步: empty_qu...
  • 0 votes
     answers
     views

    中断服务程序中的互斥锁

    在linux中,为什么我们不能在isr()例程中使用互斥锁来保护共享资源?
  • 3 votes
     answers
     views

    使用pthreads互斥和条件变量

    我正在寻求一些帮助的问题写在点号 . 在此之前,我描述了我的代码的结构 . 从 main() ,创建两个线程thread1和thread2,并分别初始化为两个函数 fun1() 和 fun2() . 我有一个名为 lock_mutex 的互斥锁和名为 cond1 , cond2 , cond3 和 cond4. 的条件变量 我有全局布尔变量 var1 , var2 , var3 和 ...
  • 23 votes
     answers
     views

    pthread互斥体的“属性”是什么?

    函数pthread_mutex_init允许您指定指向属性的指针 . 但我还没有找到pthread属性的详细解释 . 我总是提供NULL . 这个论点有用吗? 文档,对于那些忘记它的人: PTHREAD_MUTEX_INIT(3)BSD库函数手册PTHREAD_MUTEX_INIT(3)名称pthread_mutex_init - 创建互斥锁概要#include <pthread.h&g...
  • 35 votes
     answers
     views

    何时需要一个条件变量,是不是一个互斥量足够?

    我确定互斥是不够的,这就是条件变量概念存在的原因;但它打败了我,当一个条件变量必不可少时,我无法用一个具体的场景来说服自己 . Differences between Conditional variables, Mutexes and Locks问题的接受答案说条件变量是a 使用“信号”机制锁定 . 当线程需要等待资源变得可用时使用它 . 线程可以在CV上“等待”,然后资源生成器可以“发出信号...
  • 75 votes
     answers
     views

    在不锁定互斥锁的情况下调用pthread_cond_signal

    我在某个地方读到我们应该在调用 pthread_cond_signal 之前锁定 mutex 并在调用后解锁静音: pthread_cond_signal()例程用于发信号(或唤醒)正在等待条件变量的另一个线程 . 它应该在锁定互斥锁后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程 . 我的问题是:是不是可以在不锁定互斥锁的情况下调用 pthread_cond_si...
  • 2 votes
     answers
     views

    pthread互斥锁在等待时无法解锁

    我正在使用c posix线程,我遇到了一个我不太了解的问题,想要一些新鲜的眼睛来看看问题是什么 . 总之,我正在创建3个线程来检查某些程序状态,发出信号表明它们已准备就绪,然后等待更多信号 . 同时,创建这些线程的线程正在等待(pthread_cond_wait_)每个线程发出信号表明它已经被设置 . 但是,一旦发出等待信号,似乎永远不会解锁互斥锁,导致程序完全停止 . 这是主线程的代码: pth...
  • 0 votes
     answers
     views

    Pthread同步:两个文本文件的返回和读取

    我正在编写一个创建两个线程的程序 . 每个线程负责读取一个文本文件,每行有一个字符 . 第一种格式如下: h 0 h 0 ... 第二个格式如下: 0 i 0 i 0 i 有时可能会有多个字母在彼此之后,或者在彼此之后有多个零 . 但是,可以肯定的是,如果一个文件的一行上有一个字母,则第二个文件的相应行将为0,反之亦然 . 线程应该继续将文件输入读取到全局char数组中,直到它们达到零 . 此...
  • 2 votes
     answers
     views

    Pthreads:分段错误错误

    我有几个问题 . 这是我第一次尝试制作多线程程序 . 注意 - 完整程序位于页面底部 (编译,使用 g++ -pthread -o <executable file name> <sourcefile>.cpp -fpermissive ) 我使用Ubuntu Studio 10.10 64位编译它 . 这个程序最大的问题是它给了我一个分段错误 . 它似乎是由我在int ...
  • 162 votes
     answers
     views

    为什么pthreads的条件变量函数需要互斥锁?

    我在读 pthread.h ;条件变量相关函数(如 pthread_cond_wait(3) )需要互斥锁作为参数 . 为什么?据我所知,我将创建一个互斥体只是用作该参数?那个互斥锁应该做什么?
  • 153 votes
     answers
     views

    C#中各种线程同步选项有什么区别?

    有人可以解释之间的区别: lock(someobject){} 使用互斥锁 使用信号量 使用监视器 使用其他.Net同步类 我只是想不出来 . 在我看来前两个是一样的?
  • 0 votes
     answers
     views

    异步信号导致套接字I / O问题

    我正在一个多线程环境中的客户端 - 服务器应用程序 . 客户端和服务器都有两个线程 . 主线程使用套接字(IPv4-TCP)发送数据,客户端的相应主线程收集数据 . 发送和recv函数是自定义函数作为我的设计的一部分 . 我在另一个线程中为服务器上的SIGUSR1,SIGUSR2和SIGINT设置了三个信号处理程序 . 在接收到SIGINT时,完成线程清理以正常关闭所有套接字并终止线程,在接收SI...
  • 0 votes
     answers
     views

    C - 无法弄清楚如何使用互斥锁计算线程

    我正在用C编写多线程合并排序 . 上下文:用户使用适当的标志运行程序,例如“./mergeSort 100 -t 20” 第一个数字代表程序生成和排序的随机数,-t标志代表使用线程,最后一个数字代表程序应该使用的最大线程数(当程序达到最大线程数时,它继续使用标准合并排序而不使用多线程) . 为了计算线程数,我使用全局变量number_of_units和互斥锁,但我不能,在我的生活中,做对了 . 标...
  • 574 votes
     answers
     views

    创建单实例WPF应用程序的正确方法是什么?

    在.NET下使用C#和WPF(而不是Windows Forms或控制台),创建只能作为单个实例运行的应用程序的正确方法是什么? 我知道它与一些叫做互斥的神话故事有关,我很少能找到一个不愿意停下来解释其中一个是什么的人 . 代码还需要通知已经运行的实例用户尝试启动第二个,并且如果存在任何命令行参数,也可以传递 .
  • 1 votes
     answers
     views

    如何为一组pthreads共享一个互斥锁?

    我正在尝试用pthreads做一些事情并同步它们:我怎么能只为一组线程使用互斥?假设我有t0,t1,t2,... t20 . pthreads同时运行,我希望锁定偶数线程和奇数线程的其他锁定...或前十个锁定,其余为其他锁定,或者每个锁定一个锁定 . 我的意思是,根据数据对pthreads进行分组(这个函数中的第四个参数: int pthread_create(pthread_t * thre...
  • 2 votes
     answers
     views

    使用互斥锁和pthread同步屏幕输出

    我正在玩一个相当简单的C例子 . 该程序创建两个线程并并行启动它们 . 每个线程都设计为使用Mutex修改全局变量,并打印出该值 . #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> int A=10; pthread_mutex_t M;...
  • 0 votes
     answers
     views

    并行汇总数组

    我有以下算法来总结数组的元素: // global index = 0 array = [...] total_sum = 0 // this is what we're interested in // per thread thread_sum = 0 mutex.lock() while (index < array.size) { mutex.unlock() threa...
  • 1 votes
     answers
     views

    ARM Cortex-M4 Mutex锁 . DMB指令

    我阅读了以下文档:ARM的Barrier_Litmus_Tests_and_Cookbook . 第7.2节显示了获取互斥锁/信号量的代码 . Loop LDREX R5, [R1] ; read lock CMP R5, #0 ; check if 0 STREXEQ R5, R0, [R1] ; attempt to store new value CMPEQ R5, ...
  • 2 votes
     answers
     views

    在Go中,从并发可访问的结构中检索后,哪些数据类型可以安全地读取和写入?

    可能不清楚问题本身我在这之后是什么,所以让我澄清一下 . 作为并发练习,我正在编写一个需要多个同时请求可访问的缓存 . 缓存内容的类型为interface {},因此它可以包含任何内容,包括切片,贴图和结构 . 当我使用Get方法获取某些东西时,我在读取它时对其进行RLock,然后返回内容并使用延迟的RUnlock完成 . 这适用于数字和字符串以及返回时自动复制的任何其他值 . 但是我担心切片,贴...
  • -2 votes
     answers
     views

    如何使用Mutex字段创建结构的元素

    我有一个 Get() 函数: func Get(url string) *Response { res, err := http.Get(url) if err != nil { return &Response{} } // res.Body != nil when err == nil defer res.Body.Close()...
  • 3 votes
     answers
     views

    不能在C中引发优先级倒置

    我试图在一个小的 C++ 程序上激发 Priority Inversion 用于演示目的,但我不能:持有互斥锁 is not preempted 的低优先级线程并继续在关键部分运行 . 这就是我正在做的事情: // let's declare a global mutex pthread_mutex_t my_mutex; ... int main(int argc, char **argv...
  • 10 votes
     answers
     views

    如何实现每台机器应用程序的单实例?

    我必须限制我的.net 4 WPF应用程序,以便每台计算机只能运行一次 . 请注意,我说每台机器,而不是每个会话 .到目前为止,我使用简单的互斥锁实现了单实例应用程序,但不幸的是,这样的互斥锁是每个会话 . 有没有办法创建一个机器范围的互斥锁,还是有任何其他解决方案来实现每个机器应用程序的单个实例?
  • 31 votes
     answers
     views

    WPF单实例最佳实践

    这是我到目前为止实现的代码,用于创建单个实例WPF应用程序: #region Using Directives using System; using System.Globalization; using System.Reflection; using System.Threading; using System.Windows; using System.Windows.Interop; #...
  • 0 votes
     answers
     views

    单实例应用程序上的AbandonedMutexException [重复]

    这个问题在这里已有答案: Why doesn't Mutex get released when disposed? 9个答案 我有一个.net 3.5 / c#/ wpf应用程序,我不希望用户能够运行多个实例 . 所以我在app.xaml.cs中使用以下内容 protected override void OnStartup(StartupEventArgs e) { const s...
  • 1 votes
     answers
     views

    打印Arc和Mutex类型

    如何打印由 Mutex 和 Arc 封装的 Vec 的值?我'm really new to Rust, so I'我不确定我是否正在措辞 . 这是我的代码,松散地基于文档 . use std::sync::{Arc, Mutex}; use std::thread; fn main() { let data = Arc::new(Mutex::new(vec![104, 101, 10...
  • 1 votes
     answers
     views

    在主机应用程序和DLL中使用相同的互斥锁

    我有一个多线程应用程序,动态加载dll(插件) . 我在DLL中有线程 . 主机app和dll之间是我自己的SDK,其目的是启用与dll插件(库接口)的通信,并定义主机应用程序和dll(数据结构等)之间的共享资源 . 主机应用程序正在使用WinAPI函数CreateMutex创建一个互斥对象,并将创建的互斥锁的THandle传递给我加载的每个dll . 当DLL中的线程正在更改公共资源时,它使用互...
  • 8 votes
     answers
     views

    取消已锁定互斥锁的线程不会解锁互斥锁

    帮助客户解决他们遇到的问题 . 我更像是一个系统管理员/ DBA人,所以我正在努力帮助他们 . 他们说这是内核/环境中的一个错误,我试图证明或反驳它之前我坚持认为它是在他们的代码中或寻求供应商支持操作系统 . 发生在Red Hat和Oracle Enterprise Linux 5.7(和5.8)上,应用程序是用C语言编写的 他们遇到的问题是主线程启动一个单独的线程来执行可能长时间运行的TCP c...
  • 104 votes
     answers
     views
  • 1 votes
     answers
     views

    何时使用自旋锁是个好主意?

    看起来自旋锁并不是那么好,因为它们在等待(阻塞)时会浪费CPU周期 . 如果线程在等待唤醒信号时进入休眠状态,则在旋转时CPU周期不会丢失 . 如果把锁保持很短的时间,使用螺旋锁也许是好的,那么它可能使用更少的时间?如果这是真的么?
  • 3 votes
     answers
     views

    厕所关键例子中Binary Semaphore和Mutex之间的区别?

    我已经在Stackoverflow上阅读了关于此主题的帖子,但无法理解要点 . 也许我们可以将它们的差异限制在一个具体的例子 带锁的卫生间 . Mutex:一个线程接受密钥进入 . 如果任何其他线程需要进入厕所,他们等待 . 当前所有者出来并将钥匙交给警卫(OS内核),后者将厕所的船主交给另一个人 . 问题陈述:我看到所有人都同意共享资源必须由锁定它的那个线程中的相同互斥锁解锁 . 但对于二进制...

热门问题