Sha256: 341e8e88df9c29d18999072ee4bc2b363ea6d13b659d4a1eeade9af142653f36

Contents?: true

Size: 1.43 KB

Versions: 35

Compression:

Stored size: 1.43 KB

Contents

#ifndef _WIN32
#include "threads.h"
#include <cstdlib>
#include <unistd.h>
#include <pthread.h>

extern "C" {
static void* startfunc(void *arg)
{
    Thread *thr = reinterpret_cast<Thread *>(arg);
    thr->doRun();
    return NULL;
}
}

Thread::Thread(StartFunc startfn, void *arg)
{
    this->fn = startfn;
    this->fnparam = arg;
    initialized = true;
    pthread_create(&thr, NULL, startfunc, this);
}

void
Thread::close()
{
    if (!initialized) {
        return;
    }
    join();
    initialized = false;
}

Thread::~Thread()
{
    close();
}

void
Thread::join()
{
    void *res;
    pthread_join(thr, &res);
}


// Mutex:
Mutex::Mutex()
{
    pthread_mutex_init(&mutex, NULL);
    initialized = true;
}

void
Mutex::lock()
{
    pthread_mutex_lock(&mutex);
}

bool
Mutex::tryLock()
{
    return pthread_mutex_trylock(&mutex) == 0;
}

void
Mutex::unlock()
{
    pthread_mutex_unlock(&mutex);
}

void
Mutex::close()
{
    if (initialized) {
        initialized = false;
        pthread_mutex_destroy(&mutex);
    }
}

Mutex::~Mutex()
{
    close();
}


// Condvar
Condvar::Condvar()
{
    pthread_cond_init(&cond, NULL);
    initialized = true;
}

void
Condvar::wait(Mutex& mutex)
{
    pthread_cond_wait(&cond, &mutex.mutex);
}

void
Condvar::signal()
{
    pthread_cond_signal(&cond);
}

void
Condvar::close()
{
    if (initialized) {
        pthread_cond_destroy(&cond);
        initialized = false;
    }
}

Condvar::~Condvar()
{
    close();
}
#endif

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
mt-libcouchbase-1.4.03 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
mt-libcouchbase-1.4.02 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
mt-libcouchbase-1.4.01 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
mt-libcouchbase-1.4.0 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.3.2 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.3.0 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.8 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.7 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.6 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.5 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.4 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.3 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.2 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.1 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.2.0 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.1.1 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.1.0 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.0.4 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.0.3 ext/libcouchbase/tests/ioserver/threads-pthreads.cc
libcouchbase-1.0.2 ext/libcouchbase/tests/ioserver/threads-pthreads.cc