Как сообщить NetBeans информацию о pthread_barrier_t

Я не могу заставить netbeans распознавать тип pthread_barrier_t. Я могу ввести #include<pthread.h> хорошо, но не повезло на pthread_barrier_t.

Ниже приведена сборка и ошибка:

g ++ -lpthread -c -g -MMD -MP -MF build / Debug / GNU-MacOSX / main.od -o build/Debug/GNU-MacOSX/main.o main.cpp main.cpp:32: ошибка: 'pthread_barrier_t не называет тип

Я использую Netbeans 7.1 и использую Mac OSX 10.7.2. Я могу создавать потоки без проблем компиляции.

bool isNotInSteadyState()
{
    int rc = 0;
    threadData threadDataArray[NUM_THREADS];
    int dataArrayCount = 0;
    if (NUM_THREADS < ((PLATE_SIZE - 2) * (PLATE_SIZE - 2)))
    {
        for (int i = 1; i < PLATE_SIZE - 1; i += sqrt(NUM_THREADS))
        {
           for (int j = 1; j < PLATE_SIZE - 1; j += sqrt(NUM_THREADS))
           {
                threadDataArray[dataArrayCount].endY = i + sqrt(NUM_THREADS) - 1;
                threadDataArray[dataArrayCount].x = i;
                threadDataArray[dataArrayCount].endY = j + sqrt(NUM_THREADS) - 1;
                threadDataArray[dataArrayCount++].y = j;
                pthread_t* thread;

                int pthread_create(thread, NULL,isNotInSteadyStateCheckRunInParallel, &threadDataArray[dataArrayCount]);
                if (dataArrayCount >= NUM_THREADS)
                {
                    //pthread_barrier_init(pthread_barrier_t * barrier,
              //const pthread_barrierattr_t *restrict attr, NUM+THREADS);
                }
                if (rc != 0)
                {
                        fprintf(stderr, "Steady State check failed!\n");
                }
          }
       }
    }    

}

Мысли?

Спасибо,

1 ответ

Решение

Согласно информации о pthread_barriers на opengroup.org, барьеры определены в дополнительной части POSIX 1003.1 edition 2004; название опции - "(ADVANCED REALTIME THREADS)", иногда более точное название "BAR, барьеры (в реальном времени)".

Все опции POSIX перечислены здесь

2.1.3 POSIX Conformance
POSIX System Interfaces

Система может поддерживать один или несколько параметров (см. Параметры), обозначаемых следующими символическими константами:

_POSIX_BARRIERS

Таким образом, только если макрос _POSIX_BARRIERS определен как положительное число, вы можете использовать pthread_barrier_t или pthrad_barrier_wait.

Mac OS X совместима с POSIX, но я не могу найти полный список реализованных опций. Я знаю, что у Solaris тоже есть проблемы с pthread_barrier. В списке Apple Mainline с 2006 года есть сообщение о том, что в Mac OS X нет никаких препятствий.

Другие вопросы по тегам