now we can use Lock() more than one in the same thread and next Unlock() will recognize it sample: Lock(); // first lock -- resources locked Lock(); // second lock -- skipped (counter incremented) ... Unlock(); // first unlock -- skipped (because counter greater than zero) Unlock(); // second unlock -- actually unlocking git-svn-id: svn://ttmath.org/publicrep/winix/trunk@830 e52654a7-88a9-db11-a3e9-0013d4bc506e
44 lines
534 B
C++
Executable File
44 lines
534 B
C++
Executable File
/*
|
|
* This file is a part of Winix
|
|
* and is not publicly distributed
|
|
*
|
|
* Copyright (c) 2010-2012, Tomasz Sowa
|
|
* All rights reserved.
|
|
*
|
|
*/
|
|
|
|
#ifndef headerfile_winix_core_synchro
|
|
#define headerfile_winix_core_synchro
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
|
|
struct Synchro
|
|
{
|
|
// one global mutex
|
|
pthread_mutex_t mutex;
|
|
|
|
|
|
// true when winix is closing
|
|
volatile bool was_stop_signal;
|
|
|
|
|
|
Synchro();
|
|
|
|
bool Lock();
|
|
void Unlock();
|
|
|
|
private:
|
|
|
|
// deadlock counter
|
|
// we can call Lock() more than one in the same thread
|
|
int ref;
|
|
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|