我正在尝试创建一个基于 Allegro 互斥锁(跨平台)的自定义互斥锁类。我没有使用 C++11。我正在尝试这样做,但这似乎有点多余:
template <class T>
class Mutex
{
private:
ALLEGRO_MUTEX *mutex = NULL;
ALLEGRO_THREAD *owner = NULL;
T *data = NULL;
public:
Mutex ();
Mutex (T* data);
~Mutex ();
bool lock (ALLEGRO_THREAD* thread);
bool unlock (ALLEGRO_THREAD* thread);
bool trylock (); //Returns true if you can lock the thread
bool set (T* data, ALLEGRO_THREAD* thread);
bool get (T** data, ALLEGRO_THREAD* thread); //Pass reference of pointer
}
构造函数将调用al_create_mutex()
并在第二个的情况下设置数据指针。析构函数调用al_destroy_mutex()
.
lock 方法将检查是否owner
是NULL
(表示互斥锁已解锁并且没有线程拥有它)。如果是NULL
,那么它将设置owner = thread
并锁定互斥锁。unlock 方法解锁互斥锁 ifthread == owner
和设置owner = NULL
。
trylock 方法只是检查 if owner == NULL
,表明互斥锁没有被任何线程锁定。
set
和方法将get
设置并返回存储的指针,仅当调用线程是锁定互斥锁的所有者时。
我有一种感觉,每次你想调用一个方法时,整个线程都通过了,但我看不到任何其他方法可以使这个类线程安全,因为 Allegro 没有一个al_get_current_thread()
函数或类似的东西。这门课我该怎么办?