Ошибка инициализации pthread_mutex_t - PullRequest
4 голосов
/ 20 декабря 2008

Я использую xcode 2.4.1 на тигра. Когда я делаю ниже, все в порядке. когда я делаю

pthread_mutex_t mute;
ImageMan()
{
    dibSize=0;
    mute  = PTHREAD_MUTEX_INITIALIZER;
}

Я получаю эти две ошибки

error: expected primary-expression before '{' token
error: expected `;' before '{' token

Я не знаю почему. Однако, если я сделаю pthread_mutex_t mute = PTHREAD_MUTEX_INITIALIZER; это работает отлично. Почему?

-edit- Я не управлял этим, но это, кажется, компилируется. Зачем? да?

    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    mute = mutex;

Ответы [ 2 ]

16 голосов
/ 20 декабря 2008

PTHREAD_MUTEX_INITIALIZER - это постоянный инициализатор, действительный только при инициализации. Это макрос, который не обязательно расширяется до целочисленного типа.

Ваш mute=mutex; недействителен - вместо этого вы должны использовать:

pthread_mutex_init(&mute, NULL);

или если вы распределяете мьютексы динамически:

m = malloc(sizeof(pthread_mutex_t)));
pthread_mutex_init(m, NULL);
2 голосов
/ 10 июля 2015
mute = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;

Это еще одно решение этой ошибки.

...