В настоящее время я занимаюсь разработкой счетного семафора в C ++, пытаясь соответствовать тому же уровню стандарта, что и Java, за исключением InterupptedExceptions, так как st ++ :: threads C ++ не поддерживают прерывание. Я читал документацию по классу на Java и натолкнулся на два вопроса, которые действительно меня сейчас смущают.
https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Semaphore.html
Вопрос 1:
в отношении освобождения разрешений. Я вижу, что в заявлении "Не существует требования, чтобы поток, который выпускает разрешение, приобрел это разрешение путем вызова acqu ()".
Если не существует права собственности на получение разрешения и его выдачу в том же порядке, что и в следующем случае.
какой-то мошеннический поток просто пытается запустить релиз, и он никогда не получал его вообще. Что будет выпущено тогда?
молча возвращается и ничего не делает?
Вопрос 2:
Что происходит, если поток получает счетчик семафоров и выдает исключение, когда выпуск просто пропускается, возможно, из-за того, что исключение распространяется за пределы класса этой функции потока. Это приводит к утечке в таком случае?