MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / FilesystemLock

Class FilesystemLock

Kernel/include/lock.h:11–49  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9#include <logging.h>
10
11class FilesystemLock {
12 unsigned activeReaders = 0;
13 lock_t fileLock = 0;
14
15 FastList<thread*> readers;
16 FastList<thread*> writers;
17public:
18 lock_t lock = 0;
19
20 FilesystemLock() {}
21
22 void AcquireRead(){
23 acquireLock(&lock);
24
25 activeReaders++;
26
27 if(activeReaders == 1){
28 acquireLock(&fileLock);
29 }
30
31 releaseLock(&lock);
32 }
33
34 void AcquireWrite(){
35 acquireLock(&fileLock);
36 }
37
38 void ReleaseRead(){
39 if(activeReaders == 1){
40 releaseLock(&fileLock);
41 }
42
43 activeReaders--;
44 }
45
46 void ReleaseWrite(){
47 releaseLock(&fileLock);
48 }
49};
50
51class Semaphore : public Scheduler::GenericThreadBlocker{
52protected:

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected