0

我正在将现有的 C++ 项目移植到 Objective-C++ 并遇到了这个互斥锁的东西。我不确定这里做了什么,如果它是正确的。要初始化某种多线程锁机制(称为“CriticalSection”),请执行以下操作:

#include <pthread.h>

pthread_mutex_t cs;
pthread_mutexattr_t attr;

稍后在代码中:

pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&cs, &attr);

进入“锁”有:

pthread_mutex_lock(&cs);

离开“锁”:

pthread_mutex_unlock(&cs);
pthread_mutex_destroy(&cs);

我的问题(因为我不知道这是如何完成的)是:这看起来像一个正确的实现吗?因为我遇到了看起来锁定机制不起作用的问题(错误的内存访问错误,在使用“CriticalSection”的情况下损坏的指针)。

4

1 回答 1

0

这是正确的,只是您不想在解锁时破坏互斥锁。仅当您可以保证所有线程都已完成互斥锁时才销毁互斥锁​​。

例如:

class CriticalSection
{
public:
    CriticalSection()
    {
        pthread_mutexattr_t attr;
        pthread_mutexattr_init(&attr);
        pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
        pthread_mutex_init(&mutex, &attr);
    }
    ~CriticalSection() { pthread_mutex_destroy(&mutex); }
    void Enter() { pthread_mutex_lock(&mutex); }
    void Leave() { pthread_mutex_unlock(&mutex); }
private:
    pthread_mutex_t mutex;
};
于 2013-06-17T12:49:56.570 回答