Очень поверхностно, буквально с самого начала нет информации о разнице/схожести процессов и потоков. На вопросы студентов идут какие-то неубедительные ответы, типа: "Ну можно так, а можно и так, и многие приложения так построены..." Хотя, возможно, для этого(начального) уровня слушателей больше и не надо.
std::future называется "фьючерс" - это такой "квиток", который мы получаем при создании std::async, чтобы с помощью этого квитка иметь доступ к результатам выполнения функции потока. Стоит отметить, что поток может сразу не запуститься, но он гарантированно запустится (если не был запущен), когда мы вызовем фьючерс.get();
+Andrey Andruschenko вы же сами цитируете доки: "A thread attempting to lock a mutex that is already locked by another thread is suspended ***until the owning thread unlocks the mutex first***." Анлочить может ТОЛЬКО owning thread, о чём я и говорю.
+Andrey Andruschenko а, ну я ниже написал "изменить", может неочевидно просто: взведённый мутекс может изменить только тот, кто его взвёл. А семафор может изменять любой тред.
Да, я знаю. Иначе, как говорится, "кина бы не было". Как я писал, мой комментарий появился ввиду неверного понимания вашего комментария. Сейчас все вопросы сняты.
Roman Chudov сейчас, кстати, проверил, на GCC 4.9.2 можно анлочить мутекс из другого потока, но это однозначно не соответствует стандарту c++11/14, это undefined behavior, завтра проверю в последних clang и gcc
Очень поверхностно, буквально с самого начала нет информации о разнице/схожести процессов и потоков. На вопросы студентов идут какие-то неубедительные ответы, типа: "Ну можно так, а можно и так, и многие приложения так построены..."
Хотя, возможно, для этого(начального) уровня слушателей больше и не надо.
std::future называется "фьючерс" - это такой "квиток", который мы получаем при создании std::async, чтобы с помощью этого квитка иметь доступ к результатам выполнения функции потока. Стоит отметить, что поток может сразу не запуститься, но он гарантированно запустится (если не был запущен), когда мы вызовем фьючерс.get();
+Roman Chudov не фьючерс, а фьючер :-) Множественного числа там нет, это не фьючерс на нефть :-)
19 слайд хорошо бы снабдить UML Sequence диаграммой, так как на доске ничего не видно
Vladislav, вы заблуждаетесь или путаете понятия - mutex таки можно менять из любого потока создавшего его процесса.
+Andrey Andruschenko вы же сами цитируете доки:
"A thread attempting to lock a mutex that is already locked by another thread is suspended ***until the owning thread unlocks the mutex first***."
Анлочить может ТОЛЬКО owning thread, о чём я и говорю.
+Andrey Andruschenko а, ну я ниже написал "изменить", может неочевидно просто: взведённый мутекс может изменить только тот, кто его взвёл.
А семафор может изменять любой тред.
Да, вы выразились не совсем понятно. Отсюда и мои уточнения.
Andrey Andruschenko ну на самом деле, другой тред не может изменить мутекс, пока он занят: ни залочить, ни анлокнуть
Да, я знаю. Иначе, как говорится, "кина бы не было". Как я писал, мой комментарий появился ввиду неверного понимания вашего комментария. Сейчас все вопросы сняты.
22:16 "Мьютекс - это бинарный семафор." - неверно (состояние мьютекса нельзя изменить из другого потока, в отличие от бинарного семафора)
+Vladislav Yaroslavlev зачем, в таком случае, существуют мьютексы, если их нельзя изменить в другом потоке?
Roman Chudov как раз чтобы нельзя было попасть в защищённую мутексом область дважды (из одного и того же или из разных потоков - неважно)
Roman Chudov другими словами, анлочить мутекс может только тот поток, который его залочил
Roman Chudov сейчас, кстати, проверил, на GCC 4.9.2 можно анлочить мутекс из другого потока, но это однозначно не соответствует стандарту c++11/14, это undefined behavior, завтра проверю в последних clang и gcc
Roman Chudov так, а доки pthread явно говорят, что из другого потока нельзя