我曾经知道临界区不能用于进程,因为它们不是内核对象。但在现代操作系统中,我看到了两种可以与进程一起使用的实现。
使用TSL实现:
enter region:
TSL REGISTER,LOCK | copy lock to register and set lock to 1
CMP REGISTER,#0 | was lock zero?
JNE enter region | if it was not zero, lock was set, so loop
RET | return to caller; critical region entered
lea
环境: C++、VS2008、MFC、app for Windows XP。我必须在2个线程中访问和修改一个树结构。我的想法是用一个CCriticalSection来保护每个节点,每当节点内部数据(非子节点)被访问时,它就会锁定。我期望有大量的节点(2-300000)。
非常多的临界区会成为问题吗?
我听说Windows有一个问题,大量打开的句柄,这就是为什么我问这个。
我正在阅读Linux源代码以了解调度是如何工作的。我了解到,在可抢占的内核中(设置了CONFIG_PREEMPT),通过调用preempt_schedule_irq从中断处理程序返回内核空间后,存在抢占的机会。
但是,我还在中找到了以下代码片段
do {
preempt_disable();
local_irq_enable(); //why enable interrupt here?
__schedule(true); //interrupt would be disabled inside it
local_irq_disable();
sched
我在哪里可以找到关于“自适应”pthread互斥的文档?符号PTHREAD_MUTEX_ADAPTIVE_NP是在我的系统上定义的,但是我在网上找到的并没有说明什么是自适应互斥,或者什么时候适合使用它。
所以..。它是什么,我应该什么时候使用它?
作为参考,我的libc版本是:
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10.5) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is f
我正在开发一个简单的多线程网络爬虫。我使用sqlite数据库来存储将要扫描的threads.The。我只有一个数据库句柄,问题是主线程查询数据库,以便产生新的urls线程正在访问相同的句柄,但主线程也是。
我已经为每个线程定义了临界区,包括主线程。但如果线程也在临界区,主线程仍会继续执行代码。
下面是一些代码:
CreateDb;
InitializeCriticalSection(critical);
index := 0;
repeat
if threads < THREADS_MAX then
begin
EnterCriticalSec
我不确定我是否理解正确。TryEnterCriticalSection只调用一次,它不像EnterCriticalSection那样粘滞?例如,如果我写下这样的代码
if(TryEnterCriticalSection (&cs))
{
//do something that must be synh
LeaveCriticalSection(&cs);
}
else
{
//do other job
}
//go on
如果TryEnterCriticalSection返回false,部分do something that must be synh将永远不会完成,do oth
我从我的大学得到了一个关于n进程的临界截面问题的项目。我已经用c编写了两个进程的代码,但我不知道如何让它在n个进程上工作。代码是用C语言编写的,用于linux线程。
下面是两个进程的代码。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int flag[2];
int turn;
const int MAX = 1e9;
int ans = 0;
void lock_init(){
flag[0]=flag[1]=0;
turn = 0;
}
void lock
// locks a critical section, and unlocks it automatically
// when the lock goes out of scope
CAutoLock(CCritSec * plock)
上面的代码来自wxutil.h,它是锁定不同进程的访问,还是仅仅锁定同一进程中的不同线程?