pthreads :: NativePthread :: defaultinit
private extern class NativePthread in "C" `{ pthread_t * `}
new create(nit_thread: Thread) import Thread.main_intern `{
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_t thread;
int r = pthread_create(&thread, &attr, (void * (*)(void *))&Thread_main_intern, nit_thread);
if (r == 0) {
pthread_t *pthread = malloc(sizeof(pthread_t));
memmove(pthread, &thread, sizeof(pthread_t));
return pthread;
}
return NULL;
`}
new create_ex(nit_thread: Thread, attr: NativePthreadAttr) import Thread.main_intern `{
pthread_t thread;
int r = pthread_create(&thread, attr, (void * (*)(void *))&Thread_main_intern, nit_thread);
if (r == 0) {
pthread_t *pthread = malloc(sizeof(pthread_t));
memmove(pthread, &thread, sizeof(pthread_t));
return pthread;
}
return NULL;
`}
fun join: nullable Object `{
void *thread_return;
pthread_join(*self, &thread_return);
if(thread_return == NULL) thread_return = null_Object();
return (nullable_Object)thread_return;
`}
fun equal(other: NativePthread): Bool `{ return pthread_equal(*self, *other); `}
fun kill(signal: Int): Int `{ return pthread_kill(*self, (int)signal); `}
end
lib/pthreads/pthreads.nit:139,1--178,3