Это непереносимая ошибка программы pthread на C ++ - PullRequest
0 голосов
/ 21 января 2012

Я пишу для программы на языке C ++.

Я получил ошибку: "pthread_getunique_np" не был объявлен в этой области

pthread_getunique_np или другие с "* np" не переносимы.

Я не могу найти решения из сообщений в сети.

Я знаю, что _np означает, что это не стандарт POSIX.

Как обойти это?Мне нужно включить некоторые заголовочные файлы или другие заменители?

спасибо

Ответы [ 3 ]

3 голосов
/ 21 января 2012

Как сказал Мартин, во многих системах вы можете просто использовать pthread_t потока в качестве уникального идентификатора. Вы можете получить это с помощью pthread_self(3), то есть POSIX. Вы можете использовать функцию pthread_equal(3), чтобы проверить два pthread_t s на эквивалентность.

pthread_t threadID = pthread_self();
if (pthread_equal(threadID, someOtherID) != 0)
    /* Branch based on being the same thread */
else
    /* Branch based on being different threads */

Насколько я могу судить, pthread_getunique_np() возвращает уникальный целочисленный идентификатор, который отличается от использования pthread_t в качестве идентификатора. Во многих системах значения, возвращаемые как pthread_self(3), так и f pthread_getunique_np(), являются одинаковыми. На самом деле вам нужно pthread_t, чтобы получить уникальное целое число.

В любом случае, pthread_self(3) требуется для возврата идентификатора потока, из которого он вызывается, поэтому я считаю, что вы должны иметь возможность использовать эту переносимую функцию так, как вам нужно.

(Информация о pthread_getunique_np() из IBM )

0 голосов
/ 21 января 2012

Просто используйте pthread_t в качестве уникального идентификатора. Скорее всего, я буду таким же, как возвращаемое значение pthread_getunique_np.

0 голосов
/ 21 января 2012

Суффикс _np означает «не переносимый».Другими словами, он не является частью стандарта POSIX и поэтому не гарантированно будет доступен в системах POSIX.

...