tgoop.com/reverse13/688
Last Update:
https://www.reddit.com/r/cpp/comments/wilctv
Я тут сделал небольшой пост-анонс на реддите о яклиб, если у вас есть технические вопросы, или что-то подобное, пишите ;)
Ещё я почистил issue, и отметил good first issue, может кого заинтересует:
https://github.com/YACLib/YACLib/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22
Ну и в качестве чего-то интересного:
Известные мне реализации в библиотеках user-space mutex для корутин C++20, в cppcoro, libunifex, folly::coro, содержат одинаковый серьезный баг, весь код после unlock может быть сериализован.
Проблема в общем здесь https://github.com/facebook/folly/blob/main/folly/experimental/coro/Mutex.cpp#L73, код после unlock начнет исполняться только после исполнения всех критических секций в батче и при этом будет исполняться последовательно, то есть после unlock нужен reschedule, и даже это лишь маскирует проблему и лишает смысле Unlock как просто функция.
В YACLib мы сделали Unlock иначе:
https://github.com/YACLib/YACLib/blob/main/include/yaclib/coroutine/async_mutex.hpp#L215
И избежали этой проблемы, сохранив преимущества эффективной lockfree реализации и возможности батчинга критических секций (только с co_await Unlock), вот тест:
https://github.com/YACLib/YACLib/blob/main/test/unit/coroutine/async_mutex.cpp#L273
Надо бы создать issue...
BY Loser story
Share with your friend now:
tgoop.com/reverse13/688