|
|
||||||
Two Threads + CriticalSection14.07.2011, 18:49. Показов 2404. Ответов 12
Метки нет (Все метки)
код...
1й. Как нужно завершать работу в потоках с критическими секциями? пока я не добавил строку SuspendThread(ThreadTwoHandle); перед DeleteCriticalSection(...) вылетало исключение, причем не всякий раз, с чем это связанно? 2й. почему, сколько бы не работала программа. она начисляет переменным в массиве значения 256.0 и -256.0 соответственно, но ведь у меня нет ограничений по диапазону допустимых значений, в чем причина? printf некорректно выводит float?
0
|
||||||
| 14.07.2011, 18:49 | |
|
Ответы с готовыми решениями:
12
idTCPSERVER + THREADS + CRITICALSECTION связае с потоками ... Synchronize vs CriticalSection CriticalSection Delphi |
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 14.07.2011, 19:28 | |
|
Я что-то не понял. Ты по критической секции проверяешь, завершился ли поток? Критическая секция не для этого.
Ожидать завершение потока нужно функцией WaitForSingleObject, а уже потом удалять критическую секцию. Добавлено через 3 минуты Почему не просто InitializeCriticalSection?
1
|
|
|
|
|||
| 14.07.2011, 19:56 [ТС] | |||
|
Deviaphan
0
|
|||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 14.07.2011, 20:03 | |
|
Ну а ты чего хотел, если удаляешь критическую секцию до завершения потока?
Сперва убей поток, а потом уже критическую секцию. Объекты должны удаляться в порядке, обратном их созданию. По крайней мере такие. Добавлено через 1 минуту И я не уверен, что должно произойти, если ты убьёшь поток до выхода из критической секции. Используй мьютекс или событие или хоть флаг для корректного завершения потока. Не надо так в наглую его прибивать.
1
|
|
|
|
||||||||||||||
| 14.07.2011, 20:12 [ТС] | ||||||||||||||
это где-то уже в стандарт возведено перед убийством потока его слипить, просто убить нельзя уже?
0
|
||||||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 14.07.2011, 20:14 | |
|
Значит, удаление происходит до того, как поток убит... Сделай культурное завершение потока и будет тебе счастье.
С читерским завершением ты с освобождением ресурсов запаришься потом.
0
|
|
|
|
||||||
| 14.07.2011, 21:34 | ||||||
|
Ты вообще зачем поток зациклил для демонстрации синхронизации мог просто цикл установить с фиксированным числом повторений, если нужно прервать поток на лету вызвать
GetExitCodeThread(thread, &id) или ExitThread(0) только когда цикл потока будет прерван или вызвать функцию TerminateThread(thread, 0); сразу завершит поток, SuspendThread - это остановка потока а не завершение. Вот пример тебе, для лучшего понимания критической секции, где два потока основной и созданный пишут в консоль по очереди, убрав критическую секцию они вместе будут одновременно писать в консоль.
0
|
||||||
|
|
||||||||||||
| 14.07.2011, 23:16 [ТС] | ||||||||||||
добавил культурное само убийство потока... по глобальному флагу... с новой крит. секцией для флага.
вариант с мютексами
0
|
||||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 15.07.2011, 06:11 | |
|
Для атомарных данных есть атомарные операции.
Проблема с кучей переменных решается их правильной организацией или перепроектированием приложения. P.S. Критическая секция быстрее мьютекса.
1
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
|
|||||||
| 15.07.2011, 10:07 | |||||||
1
|
|||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 15.07.2011, 10:45 | |
|
Только учти, что потоко-безопасно можно выполнять только эти операции. Т.е. выполнить сравнение потоко-безопасно, без блокировки, у тебя уже не получится.
1
|
|
|
|
||||||||
| 15.07.2011, 12:42 [ТС] | ||||||||
|
schdub
Вопрос. 1й. можно ли разделить участок памяти между потоками, что бы они работали одновременно, каждый над своим участком? Мне кажется можно, надо лишь что бы они не писали и не читали из одного и того же участка одновременно, я прав? Завести, скажем, одну крит. секцию на некоторый участок памяти 1024байта 1ч = 0-512байт 2ч = 512-1024байт... и если поток не может получить доступ к крит. Секции = 1ч значит он может работать с другой 2-й частью памяти, и наоборот. Так наверное можно получить буст в вычислениях на мульти кор процах, или система и один поток распределит на ядра? 2й. Как отвести второму потоку скажем 10% процессорного времени?
0
|
||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 15.07.2011, 13:11 | |||
|
Добавлено через 3 минуты Ни что не мешает тебе создать интерфейс, для получения безопасного диапазона адресов (примерно так же с файлами блокировка происходит). Т.е. ты запрашиваешь, например, диапазон с 100 до 150 элемента. Функция выполняет блокировку, проверяет допустимость диапазона, блокирует его (не мьютексами, а просто в списке используемых диапазонов), снимает блокировку и возвращает указатели или просто флаг того, что диапазон доступен. Это так, что сразу в голову пришло. Если подумать, можно неплохо развить индею.
0
|
|||
| 15.07.2011, 13:11 | |
|
Помогаю со студенческими работами здесь
13
Использование CriticalSection и InterlockedExchange и их замены при портировании с Windows IO и threads Threads
Threads Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|