![]() |
My Project
|
Functions:
#include "libthread/singthreads.h"
typedef void *(*ThreadFunc)(ThreadState *thread, void *arg);
ThreadState *createThread(ThreadFunc func, void *arg);
void *joinThread(ThreadState *thread);
Example:
#include "libthread/singthreads.h"
using namespace LibThread;
void *thread_func(ThreadState *thread, void *arg) {
...;
return result;
}
void example() {
ThreadState *thread = createThread(func, NULL):
void *result = joinThread(thread);
// Note: do not delete thread
}
Classes and functions:
#include "libthread/singthreads.h"
#include "libthread/channel.h"
template <typename T>
class Channel {
public:
Channel();
void send(T& value);
T receive();
void receive(T& result);
}
Example:
#include "libthread/singthreads.h"
#include "libthread/channel.h"
using namespace LibThread;
void example() {
Channel<int> *ch = new Channel<int>();
ch->send(1);
ch->send(2);
int value = ch->receive();
ch->receive(value); // avoids copying
delete ch;
}
Classes and functions:
#include "libthread/singthreads.h"
#include "libthread/syncvar.h"
template <typename T>
class SyncVar {
public:
SyncVar();
void write(T& value);
void read(T& result);
bool try_read(T& result);
}
Example:
#include "libthread/singthreads.h"
#include "libthread/channel.h"
using namespace LibThread;
void example() {
SyncVar<int> *svar = new SyncVar<int>();
svar->write(1);
int value;
svar->read(value);
delete svar;
}
Classes and functions:
#include "libthread/thread.h"
class Lock {
public:
Lock();
void lock();
void unlock();
}
class ConditionVariable {
public:
ConditionVariable(Lock *lock);
void signal();
void wait();
void broadcast();
}
Example:
#include "libthread/thread.h"
void example() {
Lock *lock = new Lock();
ConditionVariable *cond = new ConditionVariable(lock);
lock.lock();
cond.signal();
lock.unlock();
delete cond;
delete lock;
}
Classes and functions:
#include "libthread/thread.h"
class Semaphore {
public:
Semaphore();
Semaphore(int initial_value);
void post();
void wait();
}
Example:
#include "libthread/thread.h"
void example() {
Semaphore *sem = new Semaphore(1);
sem->wait(); // -> 0
sem->post(); // -> 1
sem->wait(); // -> 0
delete sem;
}