Mutex - Возможно ли создать новый поток для участка кода18.11.2014, 13:51. Показов 1911. Ответов 9
Метки нет (Все метки)
А возможно ли создать новый поток для участка кода ? Добавлено через 21 минуту
один ,который есть всегда и созданный pthread То есть теперь не, очевидно , кто первым инициализирует переменную shared верно ? // Сейчас выдает 112
0
|
|||||||
| 18.11.2014, 13:51 | |
|
Ответы с готовыми решениями:
9
Создать программу, которая определяет классом mutex, какой поток отработал быстрее
Mutex не приостанавливает поток |
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
|
|||
| 18.11.2014, 16:27 | |||
1
|
|||
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
|
|
| 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
|
||||||
|
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
|
||||||
| 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,765
|
|||||||
| 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
Как по нажатию на кнопку создать новый поток Создать новый поток на добавление элементов в коллекцию Составить блок-схему для небольшого участка кода Как записать регулярное выражения для этого участка кода?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|