Mutex - Возможно ли создать новый поток для участка кода18.11.2014, 13:51. Показов 1933. Ответов 9
Метки нет (Все метки)
А возможно ли создать новый поток для участка кода ? Добавлено через 21 минуту
один ,который есть всегда и созданный pthread То есть теперь не, очевидно , кто первым инициализирует переменную shared верно ? // Сейчас выдает 112
0
|
|||||||
| 18.11.2014, 13:51 | |
|
Ответы с готовыми решениями:
9
Создать программу, которая определяет классом mutex, какой поток отработал быстрее
Mutex не приостанавливает поток |
|
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,024
|
|||
| 18.11.2014, 16:27 | |||
1
|
|||
|
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,024
|
|
| 18.11.2014, 16:49 | |
|
К соажлению mutex не решит вашу проблему. Он не подходит логически для вашей задачи.
Просто mutex обеспечит лишь выполнение одного (какого-то) из потоков в единицу времени, причем того, кто быстрее сделает mutex_lock. Опять условие гонок. Вам нужна контролируемая очередность! То есть по завершению потоковой функции разрешить выполнить что-то. Или по завершению присваивания 999 разрешить выполнить что-то. Для первого случая можно тупо дождаться завершения потока pthread_join, Для второго случаю помогут "условия" pthread_cond_init и там еще 2-3 функции. Добавлено через 4 минуты Хотя и mutex тоже подойдет. Я не понял сразу примера. Ставьте mutex_lock перед shared=999 и перед вашим циклом где 112. И ставьте mutex_unlock после shared=999 и после pthread_create и printf. И будет гарантировано все время 112.
0
|
|
| 18.11.2014, 18:07 [ТС] | ||||||
|
grgdvo, да, вы правы,
это мне понятно я хочу получить пример , когда перед каждм запуском программы я получаю разные режзультаты я мошенально ,назвал тему mutex потому ,что думал о них а когда создал было уже поздно Мьтексами я могу достич ,последовательное выполнение это я понимаю я лишь хочу увидеть этот небольшой хаос , но пока достиг лишь такого результата изменил слегка код на
Результаты запусков: qazan@qazan:~/Desktop/ex$ ./a.out Maintain 111 Maintain 999 qazan@qazan:~/Desktop/ex$ ./a.out Maintain 111 Maintain 999 second thread 999 : qazan@qazan:~/Desktop/ex$ ./a.out Maintain 111 Maintain 999 qazan@qazan:~/Desktop/ex$ ./a.out Maintain 111 Maintain 999 second thread second thread 999 : qazan@qazan:~/Desktop/ex$ ./a.out Maintain 111 Maintain 999 qazan@qazan:~/Desktop/ex$ Добавлено через 5 минут Природу вывода 2 4эксперемента и предположить не могу Для остальных предполагаю ,что по окончанию вывода 1го printf второй поток завершил работу ,но такой же результат если я ставлю циклы перед созданием второго потока , то есть основной поток должен быть медленнее Как я думаю основной поток с вновь созданными как то на равне ,или я не прав
0
|
||||||
|
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,024
|
||||||
| 19.11.2014, 14:41 | ||||||
|
Ну вот так поиедее должен быть хаос... Может быть невсегда, но должен быть... Можете еще после каждого printf добавить fflush(NULL). И чем больше циклы, тем больше хаоса.
0
|
||||||
| 19.11.2014, 15:17 [ТС] | ||||||
|
grgdvo,
Писал это так ,чтобы время исполнения увеличить мне не ясно почему , выводиться 111 первым когда там цикл ,ңоторый заведомо дольше чем функция Хаос да , но под ним я подразумевал то ,что если бы эти функций были черными ящиками то хаос а когда так оячевидно ,кто дольше кого работает и тут результат не совпадает с моими ожиданиями да и ище непонятные исходы (2,4 в экспериментах) Все таки мне казалось , что распределение этого самого хаоса должно быть предсказуемым Добавлено через 2 минуты grgdvo, я кажеться понимаю потоки исполняею весь код ,как попало т е сперва один потом дроугой энное количество раз поэтому такие результаты Спасибо
0
|
||||||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|||||||
| 19.11.2014, 15:27 | |||||||
0
|
|||||||
| 19.11.2014, 23:28 [ТС] | |||||||||||
|
grgdvo, результаты таковы
в эксперементах основной поток всегда выполняеться первым , потом дочерний Опять двадцать пять . Добавлено через 7 минут korvin_, rand() то мне зачем , я хочу получить разные результаты гонок В нынешних эксперементах , не получалоьс этого добиться подозреваю ,что дело было в оптимизациях копилятора Добавлено через 7 часов 52 минуты
Воот ,это то ,что я ждал :
0
|
|||||||||||
|
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
|
|||||||
| 20.11.2014, 17:23 | |||||||
Сообщение было отмечено Памирыч как решение
Решение2. У тебя в коде с мютексами, они объявлялись дважды 3. Сделай паузу между выводом на экран, что бы успевали переключаться потоки, а то твои циклы они быстро обработают. 4. На создание потока нужно время, pthread_create отрабатывает на много раньше, чем начнётся выполняться новый поток ==> главный поток много чего ещё успеет сделать.
2
|
|||||||
| 20.11.2014, 17:23 | |
|
Помогаю со студенческими работами здесь
10
Как по нажатию на кнопку создать новый поток Создать новый поток на добавление элементов в коллекцию Составить блок-схему для небольшого участка кода Как записать регулярное выражения для этого участка кода?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|