【问题标题】:iOS using pthread_mutexattr_t troubleiOS 使用 pthread_mutexattr_t 麻烦
【发布时间】:2013-04-30 12:10:21
【问题描述】:

我正在将一个现有的 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”的情况下损坏的指针)。

【问题讨论】:

    标签: ios multithreading objective-c++ mute


    【解决方案1】:

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

    例如:

    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;
    };
    

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2020-05-06
      • 2021-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多