Макросы PTHREAD_MUTEX_INITIALIZER
и PTHREAD_COND_INITIALIZER
являются инициализаторами для struct
.Они выглядят так:
#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
#define PTHREAD_MUTEX_INITIALIZER { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
Этот синтаксис действителен только в инициализаторе, а не в назначении, поэтому вы получаете сообщение об ошибке.
Вы можете обойти эту проблему, выполнивсоставной литерал из них:
circle[i].mutex = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
circle[i].cond = (pthread_cond_t)PTHREAD_COND_INITIALIZER;
Кроме того, вы вызываете функцию initial_circle
до ее объявления.Вы должны переместить определение initial_circle
дальше в файл до main
:
void initial_circle(){
...
}
int main(){
initial_circle();
}