2012-01-28 4 views
2

Я не могу заставить netbeans распознавать тип pthread_barrier_t. Я могу ввести #include<pthread.h> в порядке, но не повезло на pthread_barrier_t.Как сообщить данные netbeans о pthread_barrier_t

Ниже сборка и ошибка:

g++ -lpthread -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp main.cpp:32: error: 'pthread_barrier_t' does not name a type

Я использую 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

Я не использую netbeans, поэтому я не знаю, что вы просите, но pthread_barrier_t не является командой, это тип. – Duck

+0

Я изменил терминологию, поэтому вернее – Will

+1

Вы имеете в виду, что вы можете получить какой-то «IntelliSense» в Netbeans или что вы получаете ошибку компилятора/сборки, если пытаетесь использовать 'pthread_barrier_t'? Если последний, пожалуйста, дайте подробную информацию об ошибке, версии инструментов и используемой платформе. –

ответ

6

Согласно info about pthread_barriers на opengroup.org барьеры определены в опциональной части POSIX 1003.1 издания 2004 года; название опциона - «(ДОПОЛНИТЕЛЬНЫЕ РЕАЛЬНЫЕ РЕЗЬБЫ)», иногда более точно называемые «BAR, барьеры (в режиме реального времени)».

варианты

Все POSIX перечислены here

2.1.3 POSIX Conformance 
POSIX System Interfaces 

The system may support one or more options (see Options) denoted by the following symbolic constants:

_POSIX_BARRIERS 

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

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

+2

Полезно знать. Похоже, что существует довольно много путаницы. – Duck

+0

Тогда не забудьте подняться на вопрос! Благодарю. – Will