critical-section相关内容

如何使用 Boost 制作关键部分?

对于我的跨平台应用程序,我已经开始使用 Boost,但我无法理解如何实现代码来重现 Win32 的关键部分或 .Net 的 lock 的行为. 我想写一个方法Foo,可以从不同的线程调用来控制对共享字段的写操作.应该允许同一线程内的递归调用(Foo() -> Foo()). 在 C# 中这个实现非常简单: object _synch = new object();无效的富(){loc ..

关键部分总是更快吗?

我在调试一个多线程应用,发现CRITICAL_SECTION的内部结构.我发现 CRITICAL_SECTION 的数据成员 LockSemaphore 很有趣. 看起来 LockSemaphore 是一个自动重置事件(不是顾名思义的信号量),当线程第一次等待 Critcal Section 被其他线程锁定. 现在,我想知道关键部分总是更快吗?Event 是一个内核对象,每个关键部分对 ..
发布时间:2022-01-22 20:18:27 C/C++开发

“暂停"的目的是什么?x86 中的指令?

我正在尝试创建一个自旋锁的愚蠢版本.在浏览网页时,我在 x86 中遇到了一条名为“PAUSE"的汇编指令,该指令用于向处理器提示当前正在此 CPU 上运行自旋锁.英特尔手册和其他可用信息表明 处理器使用这个提示来避免内存顺序违反大多数情况下,这大大提高了处理器性能.为了为此,建议将 PAUSE 指令放置在所有自旋等待循环.该文档还提到“等待(一些delay)"是指令的伪实现. 上一段的 ..
发布时间:2021-12-30 21:00:47 其他开发

ARM 中的关键部分

我在 AVR 系列处理器上实现临界区方面经验丰富,您所做的只是禁用中断(当然有内存屏障),执行关键操作,然后重新启用中断: void my_critical_function(){cli();//禁止中断//关键任务代码在这里sei();//使能中断} 现在我的问题是: 这个简单的方法是否也适用于处理器的ARM架构?我听说过关于处理器在指令上进行前瞻和其他黑魔法的事情,主要想知道这些类型 ..
发布时间:2021-11-17 21:52:47 其他开发

Windows 临界区公平性

我有一个关于使用 EnterCriticalSection 和 LeaveCriticalSection 方法的 Windows 临界区公平性的问题.MSDN 文档规定:“无法保证线程获得临界区所有权的顺序,但是,系统对所有线程都是公平的."问题出在我写的一个应用程序中,它阻塞了一些从不进入临界区的线程,即使经过很长时间;所以我用一个简单的 c 程序进行了一些测试,以验证这种行为,但是当你有很多线 ..
发布时间:2021-09-26 19:12:18 C/C++开发

是否可以将 Windows CRITICAL_SECTION 对象配置为拒绝递归访问?

默认情况下,CRITICAL_SECTION 对象是递归的.这种行为可以像 pthread mutex 一样配置来启用或禁用递归线程访问吗? 为了回应评论而澄清:我特指的是 Windows CRITICAL_SECTION 对象,而不是 Windows 互斥锁. 解决方案 不,不能.记录在案的 API 没有以任何方式提及这一点.Windows 临界区始终接受递归访问. ..
发布时间:2021-09-25 18:42:56 其他开发

我是否需要使用 volatile 关键字来访问临界区的内存?

我正在使用 gcc 为单处理器 32 位微控制器编写代码. 我需要使用链表中带时间戳的对象.代码的另一部分可能是异步的(可能在 ISR 中)将它们添加到列表中. 临界区是通过关闭中断并使用barrier()函数来实现的. 我很困惑 gcc 优化可以通过缓存指向列表项(下一个要删除的最近项、列表头或空闲列表)的指针来破坏我的代码.我不希望 while 循环中的任何内容从循环中的前一 ..

PHP/MySQL关键部分

我正在将PHP与PDO和InnoDB表一起使用. 我只希望代码允许一个用户提交的操作完成,用户可以取消或完成.但是,如果用户同时执行这两项操作,则我希望其中一个请求失败并回滚,而这目前并没有发生,这两个请求都已完成而没有异常/错误.我认为在检查行后删除该行就足够了. $ pdo =新的PDO();尝试 {$ pdo-> beginTransaction();$ rowCheck = $ ..
发布时间:2021-05-16 18:40:06 PHP

临界区总是更快吗?

我正在调试一个多线程应用程序,发现内部结构为 CRITICAL_SECTION 。我发现CRITICAL_SECTION的数据成员 LockSemaphore 很有趣。 看起来 LockSemaphore 是一个自动重置事件(顾名思义,不是信号量)和操作系统线程在第一次等待被其他线程锁定的 Critcal Section 时,以静默方式创建此事件。 现在,我想知道临界区总是更快吗?事件 ..
发布时间:2020-09-27 05:15:41 C/C++开发

ARM中的关键部分

我在AVR处理器系列的关键部分上有丰富的经验,您所要做的就是禁用中断(当然具有内存屏障),执行关键操作,然后重新启用中断: void my_critical_function() { cli(); //Disable interrupts // Mission critical code here sei(); //Enable interrupts } 现在我的问 ..
发布时间:2020-09-07 02:32:10 其他开发

CUDA中的线程/经线本地锁定

我想在cuda中实现关键部分.我读了很多关于这个主题的问题和答案,答案通常涉及atomicCAS和atomicExch. 但是,这在warp级别上不起作用,因为warp中的所有线程在atomicCAS之后都获得相同的锁,从而导致死锁. 我认为有一种方法可以通过使用翘曲的__ballot或__any指令来真正锁定cuda. 但是,经过多次尝试,我仍无法获得令人满意的(阅读有效的)解 ..
发布时间:2020-07-31 01:54:07 其他开发

.crt部分?此警告是什么意思?

我最近收到此警告(VC ++ 2010) warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators 我假设这是关键部分.自从我的操作系统课程开始已经有一段时间了,所以我真的无法弄清楚这意味着什么.如果我没记错的话,关键部分可以使用共享资源.那么,该警告与 ..

“暂停"的目的是什么? x86中的指令?

我正在尝试创建自旋锁的傻瓜版本.浏览Web时,我在x86中遇到了一条称为"PAUSE"的汇编指令,该指令用于向处理器提示当前该CPU上正在运行自旋锁.英特尔手册和其他可用信息指出 处理器使用此提示来避免内存顺序冲突 大多数情况下,可大大提高处理器性能.为了 因此,建议在其中放置一个PAUSE指令 所有自旋等待循环.该文档还提到“等待(某些 延迟)"是指令的伪实现. 上段的最后一行很直观 ..
发布时间:2020-05-24 20:51:22 其他开发

彼得森的解决方案能否在现代CPU架构上正常工作?

我正在从操作系统概念由Silberschatz,Galvin和Gagne撰写. 在第229页上,这本书陈述了有关彼得森解决方案的信息: 由于现代计算机体系结构执行基本计算机的方式 语言说明,例如加载和存储,没有任何保证 彼得森的解决方案将在这样的体系结构上正常工作. 我在 Wikipedia 上进行了查找,发现它似乎最接近一个解释: 大多数现代CPU对内存访问进行重新排序, ..
发布时间:2020-05-21 19:02:48 其他开发

在作用域锁定之前检查可选的互斥锁

我有一个构造函数,可以选择允许用户将ponter传递给Boost互斥体.如果没有提供互斥锁,则成员指针pMyMutex设置为NULL.用户可以根据需要选择应用一些线程安全性.但是,出于明显的原因,我不能在这种检查中使用scoped_lock: if (pMyMutex != NULL) const boost::mutex::scoped_lock l(*pMyMutex); // ..
发布时间:2020-05-14 01:21:57 C/C++开发

互斥线程锁定,在Python中互斥锁/锁定释放后会删除排队的函数?

这是我遇到的问题:我正在使用Python 2.7,并且我有一个在线程中运行的代码,该代码具有一个关键区域,当时只能执行一个线程.该代码当前没有互斥机制,因此我想查询特定用途的情况,其中涉及“删除"“排队"功能.我尝试使用以下最少的工作示例来模拟这种行为: useThreading=False # True if useThreading: from threading import Th ..
发布时间:2020-05-14 01:17:02 Python