| Index: src/platform-posix.cc
|
| diff --git a/src/platform-posix.cc b/src/platform-posix.cc
|
| index 9ed02cfdb5542f12fe2e1b9ec565c52d3d0e8f2e..bd8a33fabd13e2ec5d65be929e3c4b1fcd5e5a20 100644
|
| --- a/src/platform-posix.cc
|
| +++ b/src/platform-posix.cc
|
| @@ -31,6 +31,8 @@
|
|
|
| #include "platform-posix.h"
|
|
|
| +#include <pthread.h>
|
| +#include <sched.h> // for sched_yield
|
| #include <unistd.h>
|
| #include <errno.h>
|
| #include <time.h>
|
| @@ -399,6 +401,57 @@ void OS::StrNCpy(Vector<char> dest, const char* src, size_t n) {
|
|
|
|
|
| // ----------------------------------------------------------------------------
|
| +// POSIX thread support.
|
| +//
|
| +
|
| +void Thread::YieldCPU() {
|
| + sched_yield();
|
| +}
|
| +
|
| +
|
| +class POSIXMutex : public Mutex {
|
| + public:
|
| + POSIXMutex() {
|
| + pthread_mutexattr_t attr;
|
| + memset(&attr, 0, sizeof(attr));
|
| + int result = pthread_mutexattr_init(&attr);
|
| + ASSERT(result == 0);
|
| + result = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
| + ASSERT(result == 0);
|
| + result = pthread_mutex_init(&mutex_, &attr);
|
| + ASSERT(result == 0);
|
| + result = pthread_mutexattr_destroy(&attr);
|
| + ASSERT(result == 0);
|
| + USE(result);
|
| + }
|
| +
|
| + virtual ~POSIXMutex() { pthread_mutex_destroy(&mutex_); }
|
| +
|
| + virtual int Lock() { return pthread_mutex_lock(&mutex_); }
|
| +
|
| + virtual int Unlock() { return pthread_mutex_unlock(&mutex_); }
|
| +
|
| + virtual bool TryLock() {
|
| + int result = pthread_mutex_trylock(&mutex_);
|
| + // Return false if the lock is busy and locking failed.
|
| + if (result == EBUSY) {
|
| + return false;
|
| + }
|
| + ASSERT(result == 0); // Verify no other errors.
|
| + return true;
|
| + }
|
| +
|
| + private:
|
| + pthread_mutex_t mutex_; // Pthread mutex for POSIX platforms.
|
| +};
|
| +
|
| +
|
| +Mutex* OS::CreateMutex() {
|
| + return new POSIXMutex();
|
| +}
|
| +
|
| +
|
| +// ----------------------------------------------------------------------------
|
| // POSIX socket support.
|
| //
|
|
|
|
|