2
0
Fork 0
OB-Xd/Modules/gin/utilities/systemsemaphore.cpp

111 lines
1.8 KiB
C++
Raw Normal View History

2020-05-21 07:14:57 +00:00
/*==============================================================================
Copyright 2018 by Roland Rabien
For more information visit www.rabiensoftware.com
==============================================================================*/
#ifdef JUCE_WINDOWS
class SystemSemaphore::Impl
{
public:
Impl (String name)
{
ignoreUnused (name);
jassertfalse;
// not implemented yet
}
~Impl()
{
}
bool lock()
{
return false;
}
bool unlock()
{
return false;
}
bool isValid()
{
return false;
}
};
#else
class SystemSemaphore::Impl
{
public:
Impl (String name)
{
String shareName = "/jsem" + File::createLegalFileName (name);
sem = sem_open (shareName.toRawUTF8(), O_CREAT, 0644, 1);
jassert (sem != SEM_FAILED);
}
~Impl()
{
sem_close (sem);
}
bool lock()
{
if (! locked)
{
sem_wait (sem);
locked = true;
return true;
}
return false;
}
bool unlock()
{
if (locked)
{
sem_post (sem);
locked = false;
return true;
}
return false;
}
bool isValid()
{
return sem != SEM_FAILED;
}
sem_t* sem = SEM_FAILED;
bool locked = false;
};
#endif
SystemSemaphore::SystemSemaphore (const String& name)
{
impl = std::make_unique<Impl> (name);
}
SystemSemaphore::~SystemSemaphore()
{
}
bool SystemSemaphore::lock()
{
return impl->lock();
}
bool SystemSemaphore::unlock()
{
return impl->unlock();
}
bool SystemSemaphore::isValid()
{
return impl->isValid();
}