2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 255
|
||||||
1 | ||||||
CreateSemaphore, OpenSemaphore, ReleaseSemaphore10.04.2016, 20:50. Показов 4074. Ответов 0
Метки нет (Все метки)
Всем привет. Возникло несколько вопросов по семафорам.
1) Что делает функция OpenSemaphore? Читаю, написано: "Доступ к существующему семафору можно открыть с помощью функции OpenSemaphore или CreateSemaphore". То есть, для каждого потока, кроме потока создающего семафор нужно использовать OpenSemaphore or CreateSemaphore перед началом использования этого семафора? Тогда если мои утверждения выше правда, почему автор не использует в своем потоке (thread) функцию OpenSemaphore или CreateSemaphore. Ведь семафор создается в главном потоке, а используется в другом. Ниже код. Кликните здесь для просмотра всего текста
2) BOOL ReleaseSemaphore(HANDLE hSemaphor, LONG lReleaseCount, LPLONG lpPreviousCount). Где lpPreviousCount - предыдущее значение семафора. Автор пишет: "Значение параметра lpPreviousCount этой функции может быть равно null. В этом случае предыдущее значение семафора не возвращается." Всмысле??? То есть если оно не NULL, то куда оно возвратиться? Что сдесь вообще имеется ввиду, и для чего этот параметр нужен? 3) HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES IpSemaphoreAttribute, LONG llnitialCount, LONG IMaximumCount, LPCTSTR lpName); Где lpName - имя семафора. Автор пишет: "Параметр lpName может указывать на имя семафора или содержать значение null. В последнем случае создается безымянный семафор." "Если семафор с заданным именем уже существует, то функция СreateSemaphore возвращает дескриптор этого семафора." То есть два безымянных семафора создать нельзя или это правило касается только семафоров имеющих имя не null? Добавлено через 18 минут Вопрос №2 можно не отвечать. Нашел ответ. Этот указатель, куда надо записать предыдущее значение семафора до увеличения. Добавлено через 46 минут Вопрос №1 тоже вроде понятно. Это если мы где то сделали в потоке сделали CreateSemaphore, то чтобы не передавать HANDLE семафора в поток, или не делать его глобальным, мы можем получить доступ к этому семафору с помощью функции OpenSemaphore или CreateSemaphore, указав в аргументе имя этого семафора. Так ведь?
0
|
10.04.2016, 20:50 | |