Комментарии 8
Есть какой-то скрытый смысл в том, что объект уничтожается вот так
вместо банального
?
Оставим пока современнный C++ с его умными указателями за скобками.
s -> ~Semaphore(); // destroying semaphore
вместо банального
delete s;
?
Оставим пока современнный C++ с его умными указателями за скобками.
> Есть какой-то скрытый смысл в том, что объект уничтожается вот так
Вероятно чтобы получить утечку.
На всякий случай ссылка для сомневающихся: stackoverflow.com/questions/7155330/is-memory-released-when-a-destructor-is-called-or-when-delete-is-called
Вероятно чтобы получить утечку.
На всякий случай ссылка для сомневающихся: stackoverflow.com/questions/7155330/is-memory-released-when-a-destructor-is-called-or-when-delete-is-called
Код не изучал, но там нет placement new? да, там plamenet new нет.
3. Непосредственно задача
Итого, наше задание заключается в том, чтобы написать свои аналоги на штатные функции...
Э… и все? Я б тему бы с семафоров расширил бы до вообще организации мультипоточности средствами WinAPI (а не windows.h...). Еще бы про lock-free всякое порассказывал. У WinAPI в этом плане о-очень богатый инструментарий.
А разве с включённой оптимизацией ваш последний цикл не должен развернуться в while(true)? Вы бы хотяб atomic int взяли.
Если честно, не понял посыла статьи. Вы написали что-то похожее на C++ обвёртку поверх WinAPI? Вполне можно было реализовать это на чистом C++ без платформозависимого кода. Не говоря уже о том, что в WinAPI есть готовые семафоры.
Как можно писать вот так?
while (alive_threads != 0) {}
Хоть бы SwitchToThread()
поставил… А лучше — WaitForMultipleObjects (напомню, что хендл потока тоже можно передавать туда!)
А как у вас синхронизируются WaitForSemaphore и LeaveSemaphore, что будет, если их вызвать одновременно из нескольких потоков?
По-моему никак и лучше их не вызывать одновременно, так?
По-моему никак и лучше их не вызывать одновременно, так?
В силу простоты самой задачи, особо усложнять статью не будем, но кому-то может пригодиться :)
А зря, потому что реализация не выдерживает никакой критики, и, очевидно, не тестировалась.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Семафор на событиях C++