Как стать автором
Обновить

Комментарии 8

Есть какой-то скрытый смысл в том, что объект уничтожается вот так
s -> ~Semaphore(); // destroying semaphore

вместо банального
delete s;

?
Оставим пока современнный C++ с его умными указателями за скобками.
> Есть какой-то скрытый смысл в том, что объект уничтожается вот так
Вероятно чтобы получить утечку.
На всякий случай ссылка для сомневающихся: stackoverflow.com/questions/7155330/is-memory-released-when-a-destructor-is-called-or-when-delete-is-called
3. Непосредственно задача

Итого, наше задание заключается в том, чтобы написать свои аналоги на штатные функции...


Э… и все? Я б тему бы с семафоров расширил бы до вообще организации мультипоточности средствами WinAPI (а не windows.h...). Еще бы про lock-free всякое порассказывал. У WinAPI в этом плане о-очень богатый инструментарий.

А разве с включённой оптимизацией ваш последний цикл не должен развернуться в while(true)? Вы бы хотяб atomic int взяли.
Если честно, не понял посыла статьи. Вы написали что-то похожее на C++ обвёртку поверх WinAPI? Вполне можно было реализовать это на чистом C++ без платформозависимого кода. Не говоря уже о том, что в WinAPI есть готовые семафоры.

Как можно писать вот так?


    while (alive_threads != 0) {}

Хоть бы SwitchToThread() поставил… А лучше — WaitForMultipleObjects (напомню, что хендл потока тоже можно передавать туда!)

А как у вас синхронизируются WaitForSemaphore и LeaveSemaphore, что будет, если их вызвать одновременно из нескольких потоков?
По-моему никак и лучше их не вызывать одновременно, так?
В силу простоты самой задачи, особо усложнять статью не будем, но кому-то может пригодиться :)

А зря, потому что реализация не выдерживает никакой критики, и, очевидно, не тестировалась.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории