【发布时间】:2011-09-23 06:17:11
【问题描述】:
我正在开发一个用户级线程库作为项目的一部分。我想出了一种实现互斥锁的方法。在继续之前,我想看看你的意见。基本上,我只需要在我的库中实现 3 个函数
mutex_init、mutex_lock 和 mutex_unlock
我认为我的 mutex_t 结构看起来像
typedef struct
{
int available; //indicates whether the mutex is locked or unlocked
queue listofwaitingthreads;
gtthread_t owningthread;
}mutex_t;
在我的 mutex_lock 函数中,我将首先检查 mutex 在 while 循环中是否可用。如果不是,我将让处理器让下一个线程执行。
在我的 mutex_unlock 函数中,我将检查所有者线程是否是当前线程。如果是,我将设置为0。
这是解决方法吗?另外,死锁怎么办?我应该在我的用户级库中处理这些条件,还是应该让应用程序程序员正确编写代码?
【问题讨论】:
-
如果没有其他线程准备好运行,则屈服是没有操作的,因此您将拥有一个繁忙的循环。您的目标是没有互斥体的平台吗?
-
在操作等待线程列表时,您不需要另一个互斥锁来锁定它吗?
标签: c multithreading mutex