问题标签 [critical-section]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - Mutex 是否调用系统调用?
CRITICAL_SECTION 锁定(进入)和解锁(离开)是有效的,因为 CS 测试是在用户空间中执行的,而不需要像互斥体那样进行内核系统调用。解锁完全在用户空间中执行,而 ReleaseMutex 需要系统调用。
我刚刚在这本书中读到了这些句子。
内核系统调用是什么意思?你能给我函数的名字吗?
我是一个英语新手。我是这样解释他们的。
- CS 测试不使用系统调用。
- 互斥测试使用系统调用。(但我不知道函数名称。请告诉我)
- CS解锁不调用系统调用。
- 互斥解锁需要系统调用。(但我不知道函数名称。请告诉我)
另一个问题。
- 我认为 CRITICAL_SECTION 可能会调用 WaitForSingleObject 或家庭函数。这些功能不需要系统调用吗?我想他们会的。所以CS 测试不使用系统调用对我来说很奇怪。
performance - 为什么 DeleteCriticalSection 比 InitializeCriticalSection 慢这么多?
当应用程序关闭或服务停止时,我有超过 20000 个关键部分需要删除。但是我发现 DeleteCriticaSection 函数很慢。我做一个测试:
结果:
有什么好的建议吗?
c - 当进程进入信号量(临界区)并休眠时会发生什么?
据我了解,当一个进程进入临界区时,没有其他进程可以同时进入。但我看到,通过一个程序,它不是。
我创建了进程A,子进程B。子进程进入临界区,然后睡觉,同时我很惊讶地看到父进程也进入临界区,而子进程在睡觉。这怎么可能?在关键部分同时进行 2 个进程?
multithreading - 当对其互斥体执行 up 时,线程会发生什么?
互斥锁用于保护临界区。假设已经对互斥体执行了向下操作,而执行该操作的线程在 CS 中,其他 10 个线程紧随其后,对互斥体执行向下操作,使自己进入睡眠状态。当第一个线程退出临界区并在互斥体上执行 up 时,是否所有 10 个线程都唤醒并恢复它们将要执行的操作,即进入临界区?这是否意味着所有 10 个可能会同时进入临界区?
c# - 网络农场中的分布式临界区
我有大约 50 个网站,在 5 个 Web 服务器之间进行负载平衡。它们都使用企业库缓存,并访问相同的缓存数据库。缓存数据库中的项目每隔几个小时刷新一次,使用 ICacheItemRefreshAction 实现。
我想通过将刷新代码放在关键部分中来保证只有一个网站刷新缓存。
但是,这些不能确保跨多个 Web 服务器的关键部分。
目前,我正在缓存数据库中创建一个新密钥以充当互斥锁。这通常会起作用,但我可以看到 2 个进程进入临界区的可能性很小。
有没有办法保证关键部分以确保我不会两次调用网络服务?
编辑我应该补充一点,我不能使用共享文件,因为部署策略会阻止它。
StackOverflow 参考资料:
multithreading - 什么时候应该使用临界区?
这是交易。我的应用程序有很多线程做同样的事情 - 从大文件(> 2gb)中读取特定数据,解析数据并最终写入该文件。
问题是有时可能会发生一个线程从文件 A 读取 X,而第二个线程写入同一个文件 A 的 X。会发生问题吗?
I/O 代码对每个文件使用 TFileStream。我将 I/O 代码拆分为本地(静态类),因为我担心会有问题。既然是分裂的,就应该有临界区。
下面的每个案例都是未实例化的本地(静态)代码。
情况1:
案例二:
案例3:
问题1:在哪种情况下我需要临界区,所以如果>1个线程同时调用它就没有问题?
问题 2:如果线程 1 从文件 A 中读取 X(entry),而线程 2 向文件 A 写入 X(entry),会不会有问题?
什么时候应该使用临界区?我试着把它想象成我的脑袋,但这很难——只有一个线程:))
编辑
这会适合它吗?
{每 2GB 文件一个类}
现在如果两个线程调用 Read 会出现问题:
案例 1:相同的 TSpecificFile
案例2:不同的TSpecificFile?
我需要另一个关键部分吗?
multithreading - 从另一个线程访问 VT 数据是否安全?
从辅助线程更改 VirtualTreeView 数据是否安全?如果是,我应该使用关键部分(甚至是同步方法)吗?
恐怕当我从另一个线程写入 VT 的数据记录时,主线程会同时调用它的重绘,这个刷新会导致一次读取相同的记录。我会补充说我在应用程序中只使用了 2 个线程。
就像是 ...
更新
我已经在代码中添加了关键部分,即使这个函数只返回一个指向记录的指针,从 TMyCreatedThread 类调用 GetNodeData 真的不安全吗?
非常感谢
问候
c++ - 究竟什么是临界区?
只是想对此有所了解。想象一下,我使用 EnterCriticalSection 的 windows api。我打电话给他们所有人EnterCriticalSection(&criticalsection);
这是多线程的线程函数
一旦一个线程进入临界区(第 1 部分),其他线程就无法进入该部分,无论更多数据 1 是否实际上有任何共享数据,对吗?同样在此期间,其他线程也无法进入关键部分的第 2 部分。
c++ - 使用 CriticalSection 创建类似互斥锁的程序
例如
如果调用您的函数调用或离开对象,我想创建一个锁定它并释放的函数。
如何开始上课?
multithreading - 选择性临界区 - 有条件的
我有一个将数据库表作为参数的线程,我遇到了一个问题,我无法同时写入该数据库表。
TMyThread 的 1 个实例可以有一个 'Member' 的 db 表,而另一个可能有 'Staff' 但是可能有两个线程打开同一个表的情况。
因此,我需要将代码包装在一个关键部分(或类似部分)中,但我不想要像几个关键部分(fMemberTable,fStaffTable)这样的脏东西......
我们有 8 张桌子,所以会变得凌乱有什么办法吗?
TCricalSection(fMemberTable).Enter; 还是某种易于“扩展”和使用的方法?
围绕该函数的一个关键部分没有意义,因为我不想阻止其他表....