提交 7e161483 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

pthread barriers with spinning

上级 b9d32b50
#pragma once
/*
* Our minimal version of pthreads
*/
#include "atomic.hh"
typedef int pthread_t;
typedef int pthread_attr_t;
typedef int pthread_key_t;
typedef int pthread_barrierattr_t;
typedef std::atomic<unsigned> pthread_barrier_t;
int pthread_create(pthread_t* tid, const pthread_attr_t* attr, void* (*start)(void*), void* arg);
int pthread_create(pthread_t* tid, const pthread_attr_t* attr,
void* (*start)(void*), void* arg);
pthread_t pthread_self(void);
int pthread_key_create(pthread_key_t* key, void (*destructor)(void*));
void* pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, void* value);
int pthread_barrier_init(pthread_barrier_t *b,
const pthread_barrierattr_t *attr,
unsigned count);
int pthread_barrier_wait(pthread_barrier_t *b);
......@@ -58,3 +58,20 @@ pthread_setspecific(pthread_key_t key, void* value)
__asm volatile("movq %0, %%fs:(%1)" : : "r" (value), "r" (key * 8));
return 0;
}
int
pthread_barrier_init(pthread_barrier_t *b,
const pthread_barrierattr_t *attr, unsigned count)
{
b->store(count);
return 0;
}
int
pthread_barrier_wait(pthread_barrier_t *b)
{
(*b)--;
while (*b != 0)
; // spin
return 0;
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论