![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tthread и с чем его едят?
malefik © (2006-11-08 10:28:00)Добрый времени суток!
несложный вопрос....
допустим обьявлен класс унаследованный от tthread. в секции public обьявлено поле типа int.
в приложении при создании формы создается обьект....этого класса....
TMyThread * thread = new TMyThread(false);
могу я после этого обратится к полю...
например
thread->имя_поля
или всю работы всегда проводить через
Synchronize???
Ketmar (2006-11-09 12:50:00) [1]>[43] Anatoly Podgoretsky(c) 9-Nov-2006, 12:10
>Отвечать надо?
нет, риторический.
>Кстати а ты уверен?
на моём pIII это именно так. может, новая память адресуется как-то по другому, но что-то я сильно сомневаюсь.
Anatoly Podgoretsky (2006-11-09 12:10:00) [2]> Ketmar (09.11.2006 12:03:41) [41]
Отвечать надо? С одной стороны вроде риторический вопрос, с другой стороны в конце стоит знак вопроса.
Кстати а ты уверен?
evvcom (2006-11-09 12:07:00) [3]> [38] Percent (08.11.06 22:19)
> Про "задания", "очередь", "флаги", "отчет о выполнении",
> "защиту от изменения чтения/записи" и их влияние на многопоточность
> - пожалуйста, если можно, подробнее. Особенно - про "защиту
> от изменения" и "отчет о выполнении"...
Спроси у Рихтера, он знает. Выкладывать сюда полкниги я не собираюсь.
Ketmar (2006-11-09 12:03:00) [4]>[38] Percent 8-Nov-2006, 22:19
>процессора. Поток не может быть приостановлен "где-то в
>процессе" выполнения такой команды.
ты упоминал многопроцессорные системы. там ничего не "приостанавливается". а одновременные обращения всё равно бывают. загадка?
зыж как ты думаешь, отчего aligned-данные выбираются быстрее?
Anatoly Podgoretsky (2006-11-09 08:59:00) [5]Конечно не просто так, его придумали для 8086, начиная с 80486 неактуален.
Сергей М. (2006-11-09 08:17:00) [6]
> Percent
Как думаешь, зачем в Intel придумали префикс lock ?
От нефига делать, надо понимать ?)
Percent (2006-11-08 22:19:00) [7]Доступ на чтение? Запись? Чтение и запись? Если просто почитать и больше ничего не делать, то да. А если..., то нет.
Как все многозначительно и загадочно... :-)
На самом деле, никакой разницы.
Потокобезопасно и все (в отношении 32-разрядных целых).
если integer поравняли, конечно.
Куда поравняли? К 32-бит-кратной границе? Не имеет значения. Операции перемещения память-регистр и регистр-память с 32-битными операндами выполняются одной командой процессора. Поток не может быть приостановлен "где-то в процессе" выполнения такой команды. Хотя бы потому, что состояние регистров при такой остановке окажется неопределенным. А при остановке потока поизводится сохранение состояния регистров. Что сохранять, если состояние неопределенное?
Другой поток, освобождаясь, начинает перебирать "задания", читая значения. Увидев задание в очереди, он пишет флаг, что он взялся за это задание, потом, вероятно пишет, что он его выполнил. Так вот эти чтение/запись должны быть защищены от изменения.
Про "задания", "очередь", "флаги", "отчет о выполнении", "защиту от изменения чтения/записи" и их влияние на многопоточность - пожалуйста, если можно, подробнее. Особенно - про "защиту от изменения" и "отчет о выполнении"...
evvcom (2006-11-08 19:10:00) [8]> [36] malefik (08.11.06 18:59)
Не может быть просто на запись. Скорее всего не может быть даже просто на чтение. Прежде, чем что-то писать, ты все равно сначала читаешь значение и его анализируешь, и если удовлетворяет каким-то условиям, пишешь новое значение. Другой поток, освобождаясь, начинает перебирать "задания", читая значения. Увидев задание в очереди, он пишет флаг, что он взялся за это задание, потом, вероятно пишет, что он его выполнил. Так вот эти чтение/запись должны быть защищены от изменения.
malefik (2006-11-08 18:59:00) [9]
> Доступ на чтение? Запись?
на запись ....из основной нити даю команды другой на работу с сетью....
malefik (2006-11-08 18:57:00) [10]не правильно сформулировал, сорри.....
Вобщем так, ClientSocket находится в основной нити приложения......и в его обработчике события OnConnect создаем нить .......куда передаем указатель TCustomWinSocket* _socket; .....в самой нитке создается обьект класса ТWinSocketStream * _stream; ....который и имеет собственно метод WaitForData....
Короче это работает сейчас у меня .....основное приложение не тормозит.....но хотелось бы узнать ......правильно это или нет.....
evvcom (2006-11-08 17:34:00) [11]> [32] Percent (08.11.06 17:08)
> Доступ к значению для переменных типа integer - атомарная
Доступ на чтение? Запись? Чтение и запись? Если просто почитать и больше ничего не делать, то да. А если..., то нет.
Ketmar (2006-11-08 17:10:00) [12]>[32] Percent 8-Nov-2006, 17:08
>Доступ к значению для переменных типа integer - атомарная,
если integer поравняли, конечно.
Percent (2006-11-08 17:08:00) [13][17] Сергей М. © (08.11.06 13:00)
> Percent (08.11.06 10:57) [10]
> Любая операция с этим типом данных проходит, в максимуме,
> за один такт процессора, поэтому этот тип данных - потокобезопасный.
В мультипроцессорных системах и с учетом DMA не стоит на это полагаться.
Доступ к значению для переменных типа integer - атомарная, а посему - потокобезопасная операция.
Все остальное не имеет никакого значения.
Хоть в мультипроцессорной системе, хоть с учетом DMA, хоть в другой звездной системе...
Сергей М. (2006-11-08 16:10:00) [14]
> а то что клиент сокет находится в основной нити приложения
> это как???
>
Это никак. По кр.мере пока не объяснишь. что есть "клиент сокет находится в основной нити приложения"
malefik (2006-11-08 15:39:00) [15]хорошо...прошу прощения за код......опустим его.....вопрос остался....
а то что клиент сокет находится в основной нити приложения это как???
ЗЫ VCL она и в африке VCL
Ketmar (2006-11-08 15:38:00) [16]>[26] malefik 8-Nov-2006, 15:31
>билдер ...какая собсно разница
а я сейчас приведу код на ALISP. и тоже буду утверждать, что разницы нет.
Anatoly Podgoretsky (2006-11-08 15:34:00) [17]Предупреждение: код на СИ обсуждаем в Прочее
Anatoly Podgoretsky (2006-11-08 15:34:00) [18]Раз разницы нет, то приведи и оттрасируй код на Дельфи.
malefik (2006-11-08 15:31:00) [19]билдер ...какая собсно разница .....написание кадо другое ...суть одна...
Ketmar (2006-11-08 15:31:00) [20]>[22] malefik 8-Nov-2006, 15:26
>пример....поплюйтесь......
плююсь: dcc32.exe это скомпилировать не смог.