gpt4 book ai didi

linux - 实现互斥体?

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:31 25 4
gpt4 key购买 nike

我正在尝试在我的标准库中实现互斥体,但我没有用它们取得任何进展。我知道尝试实现您不一定理解的东西是一个坏主意,但我必须这样做,因为在这个平台上编译现有的线程库(例如 uClibc)是不可能的。 是否有任何“向我解释一下,就像我是 5 一样”的互斥体?或者是否有任何“简单易懂”的实现?到目前为止我见过的所有 pthread 实现都是不可能遵循的。

下面提供了我对锁定功能的实现。我很确定它有严重的问题,因为我不知道我在做什么。

int pthread_mutex_lock(pthread_mutex_t *pmutex)
{
OSMutex* mutex = GetOSMutex(pmutex);

/* Decrement the mutex counter */
OSAtomicDecrement32(&(mutex->count));
if (mutex->count < -1) {
/*
Contended, wait for the mutex to be released.
*/
lnkLog("mutex %p already held (n=%d), waiting for stuff to change", mutex, mutex->count);

futex$LINUX(&(mutex->data),
FUTEX_WAIT,
MUTEX_MAGIC,
NULL,
NULL,
0);

lnkLog("mutex %p was released", mutex);

return 0;
}
else {
/*
Not contended. Acquire the mutex.
*/
lnkLog("locking %p", mutex);

mutex->data = MUTEX_MAGIC;
return 0;
}
}

P.S.如果您想了解 futexes,我正在使用 Linux 内核。

最佳答案

http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html

查看__sync_lock_test_and_set你必须有硬件支持才能进行原子操作。 GCC 内置函数是一个好的开始。

关于linux - 实现互斥体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322220/

25 4 0