int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);
Вам необходимо передать pointer
в pthread_t
переменную pthread_create
.&threads[t]
и threads+t
достигают этого.threads[t]
нет.pthread_create
требует указатель, чтобы он мог возвращать значение через него.
someMethod
является подходящим выражением для третьего аргумента, так как это адрес функции.Я думаю, что &someMethod
является избыточно эквивалентным, но я не уверен.
Вы используете t
на void *
, чтобы вставить long
в void *
.Я не думаю, что long
гарантированно поместится в void *
.Это определенно неоптимальное решение, даже если гарантия существует.Вы должны передать указатель на t
(&t
, приведение не требуется) для ясности и обеспечения совместимости с ожидаемым void *
.Не забудьте настроить someMethod
соответственно.
pthread_t threads[NUM_THREADS];
long t;
for (t=0; t<NUM_THREADS; t++) {
rc = pthread_create(&threads[t], NULL, someMethod, &t);
}