pthread portability
От | Michael McConville |
---|---|
Тема | pthread portability |
Дата | |
Msg-id | 20160328071525.GB2182@thinkpad.swarthmore.edu обсуждение исходный текст |
Ответы |
Re: pthread portability
|
Список | pgsql-hackers |
The below diff fixes one problem: you can't compare pthread_t values directly. Only the function pthread_equal(3) is defined. Direct comparison usually works because most implementations define pthread_t as an integer type. Relatedly, INVALID_THREAD is defined as (pthread_t)0. I don't think this is a portable way of checking whether a thread is valid, and I don't know if it's actually possible to get an "invalid" thread out of pthread_create(3) if it succeeds (returns 0). In the cases where you're setting a pthread_t to INVALID_THREAD, maybe using a struct that includes a pthread_t and a 'valid' bool would be preferable. Thanks for your time, Michael diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 4196b0e..f2e5aed 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -3791,7 +3791,7 @@ main(int argc, char **argv) { int err = pthread_create(&thread->thread,NULL, threadRun, thread); - if (err != 0 || thread->thread == INVALID_THREAD) + if (err != 0 || pthread_equal(thread->thread, INVALID_THREAD)) { fprintf(stderr, "couldnot create thread: %s\n", strerror(err)); exit(1); @@ -3819,7 +3819,7 @@ main(int argc, char **argv) TState *thread = &threads[i];#ifdef ENABLE_THREAD_SAFETY - if (threads[i].thread == INVALID_THREAD) + if (pthread_equal(threads[i].thread, INVALID_THREAD)) /* actually run this thread directly in the mainthread */ (void) threadRun(thread); else
В списке pgsql-hackers по дате отправления: