One year and one day passed since I started writing my own RTOS. distortos project is still evolving and - as of today - has 1542 commits. Since previous news article only two new features were implemented, but both of them are rarely seen in other RTOSes. One of them is OnceFlag class with callOnce() function - which are equivalents of std::once_flag class and std::call_once() function from C++11 standard or pthread_once_t structure and pthread_once() function from <pthread.h>.
Second new feature is an implementation of POSIX signals. Signals can be handled both by synchronous waiting - with ThisThread::Signals::wait(), ThisThread::Signals::tryWait(), ThisThread::Signals::tryWaitFor() andThisThread::Signals::tryWaitUntil() functions - and by asynchronous signal handlers - using ThisThread::Signals::setSignalAction() function. As in the established standards, delivery of signal causes interruption of some blocking functions (like Semaphore::wait() or MessageQueue::pop()), which return EINTR error code in that case. Looking at this feature from the other side - from the "source" of the signal - it is possible to "generate" the signal (ThreadBase::generateSignal()) or "queue" the signal with a value (ThreadBase::queueSignal()). Obviously, the signals can also be masked and ignored.
All of that is - still - possible without a single byte of dynamically allocated memory! In case of static threads (StaticThread instances) it is necessary to state whether the thread can receive the signals at all, how many signals can be queued simultaneously and how many different SignalAction objects can be used at the same time.
Stay tuned!
██╗ ██╗ █████╗ ██████╗ ██████╗ ██╗ ██╗
██║ ██║██╔══██╗██╔══██╗██╔══██╗╚██╗ ██╔╝
███████║███████║██████╔╝██████╔╝ ╚████╔╝
██╔══██║██╔══██║██╔═══╝ ██╔═══╝ ╚██╔╝
██║ ██║██║ ██║██║ ██║ ██║
╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝
██████╗ ██╗██████╗ ████████╗██╗ ██╗██████╗ █████╗ ██╗ ██╗
██╔══██╗██║██╔══██╗╚══██╔══╝██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝
██████╔╝██║██████╔╝ ██║ ███████║██║ ██║███████║ ╚████╔╝
██╔══██╗██║██╔══██╗ ██║ ██╔══██║██║ ██║██╔══██║ ╚██╔╝
██████╔╝██║██║ ██║ ██║ ██║ ██║██████╔╝██║ ██║ ██║
╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::::::::MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::::~~:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:::~?~:MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM::~~?~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:~?~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD++++7ZDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++I7$Z$I?++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++++++++++++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++++++++++++++OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++++++++++++++MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++++++O+++++OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?7+O?I++I+8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?????I++ONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++?????O++ZNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM++???????ZO?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7+??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ??????????MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ??????????OOOOOOOO8NMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMM?,,,,,,,,,,,,,,,$??????????,,,,,,,,,,,,,,,,,,,,7DMMMMMMMMMMMMMMM
MMMMMMMMM8$,,,,,,,,,,,,,,,,,,,,:$??????????:,,,,,,,,,,,,,,,,,,,,,,,,MMMMMMMMMMMM
MMMMM~,,,,,,,,,,,,,,,,,,,,,,:=+?O??????????I?=~:,,,,,,,,,,,,,,,,,,,,,,=MMMMMMMMM
MMMD,,,,,,,,,,,,,,,,,,,,,,,,:=+?I$Z??????87I?=~:,,,,,,,,,,,,,,,,,,,,,,,,MMMMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,:~==+++++==~:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DMMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8MMMMM
MMM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,,~DD8O,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,,DZZZZ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM+,,,,,,,$DZZZZ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMM7,,,,,,,DOZZZZ,,,,,,,,,,,,,,,,,,,,,,,~DDDDD8,,,,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMMD,,=DOOZZZZZZZ+,,,,,,,,,,,DDD~,,,,,,DDZZZZZZZZ?,,,,,,,,,,,,,,,,,,,,,,,,,MMMMM
MMMM8DZZZZZZZZZZZZ,,,,,,,,,,D8ZZZD,,,=DOZZZZZZZZZZ8,,,,,,,,,,,ZNNNNN,,,,,,IMMMMM
MMMNOZZZZ88888ZZZZO,,,,,,,,ODZZZZZZDDZZZZZZZZZZZZZZZ,,,,,,,,,,DNNN8888,,,,OMMMMM
MMM8OZZZZ8888ZZZZZO,,,,,,,DDZZZZZZZZZZZZZZZZZZZZZZZZZ,,,,,,,,ONNND88888,,,DMMMMM
MMMDOOZZZZZZZZZZZZ$8,,,,D8OZZZZZZ888ZZ8888ZZZZZ8888OZZ8,,,,,7NN888888888O:MMMMMM
MMMMOOZZZZZZZZZZ$$$$$$$$$$$$$ZZZZ8888O888ZZZZZO88888ZZZZZZ8D8888888888888MMMMMMM
MMMMDOZZZZZZZZZZ$$$$$$88$$$$$$ZZZZZZZZZZZZZZZZZZ88888ZZZZZZO8888888888888MMMMMMM
MMMMMOOZZZZ88888$$$$$$8O$$$$$$ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888MMMMMMM
MMMMMNOZZ888888ZZ$$$$$$$$$$$$ZZZZOZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888MMMMMMM
MMMMMMOZZ8888OZZZZ$$$$$$$$$ZZZZZ8OZZZZZZZZZZZZZZZZZZZZZZZZZ88888888888888MMMMMMM
MMMMMMOZZZ88OZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ888888888888NMMMMMMM
MMMMMNOZZZZZZZZZZZZZZZZZZZZZZZZO888ZZZZ88888ZZZZZZZZZZZ88888888888888888MMMMMMMM
MMMMM8OOZZZZZZZZZZZZZZZZZZZZO88888ZZZZZ888888ZZZZZZZZZZ88888888888888888MMMMMMMM
MMMMM8OOOZZZZZZZZZZZZZZZZZZZ88888ZZZZZZZZZZZZZZZZZZZZZZZ88OO888888888888MMMMMMMM
MMMMMMOOZZZZZ88ZZZZZZZZZZZZZZ88ZZZZZZZZZZZZZZZZZZZZZZZZZO8O8888888888888MMMMMMMM
MMMMMMOOZZZZ88888ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ888888888888888MMMMMMMM
MMMMMMMOOOZZ8888OZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ8888888888888888MMMMMMMM
MMMMMMMMMMNOOOOOZZZZZZZZZ8ZZZZZZZZZZZZZZZZZZZZZZZZZ8888O8888888888888NMMMMMMMMMM
MMMMMMMMMMMMN8OOOOOZZZZZZZZZZZZZZZZZZO88ZZZZZZZZZZO8888888888888888DMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM888ZZZZZZZZZZZZZZZZ88ZZZZZZZZZZZZZO8888888888888MMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMN8ZZZZZZZZZZZZZZZZZZZZZZZZZOOO88888888888MMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOZZZZZZZZZZO888888888888MMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
██████╗ ██╗███████╗████████╗ ██████╗ ██████╗ ████████╗ ██████╗ ███████╗
██╔══██╗██║██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔════╝
██║ ██║██║███████╗ ██║ ██║ ██║██████╔╝ ██║ ██║ ██║███████╗
██║ ██║██║╚════██║ ██║ ██║ ██║██╔══██╗ ██║ ██║ ██║╚════██║
██████╔╝██║███████║ ██║ ╚██████╔╝██║ ██║ ██║ ╚██████╔╝███████║
╚═════╝ ╚═╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|