![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Регистрация: 07.01.2009
Сообщений: 8
|
![]()
Доброго времени суток, ребят)
Дело вот в чем. Делал лабу по программированию, было задание для работы с потоками, а именно: Цитата:
Потому дал мне задание: либо разобраться и капнуть в библиотеки шарпа, и показать ему сами API команды, которые интерпретируются потом в шарповский синтаксис (lock , к примеру), либо в программе использовать не готовые методы шарпа, а ЯВНО юзать API команды с использованием какого-либо метода. Вот код моей программы: Program.cs: Код:
Код:
Код:
Код:
![]() А то спрашивает: "А какой метод синхронизации используете?". А я и сам не знаю ![]() Последний раз редактировалось neon2k; 27.12.2009 в 23:51. |
|
![]() |
![]() |
![]() |
#2 |
Регистрация: 07.01.2009
Сообщений: 8
|
![]()
Я надеюсь суть ясна? Просто надо до среды...
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 26.07.2009
Сообщений: 19
|
![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 56
|
![]()
Вот нашел пример работы с мьютексом:
Код:
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 26.07.2009
Сообщений: 19
|
![]()
Mutex очень тяжеловесный, он использует ядро системы для реализации синхронизации между потоками. Поэтому его применяют если необходима синхронизация в различных процессах. Если же тебе достаточно синхронизировать доступ внутри одного процесса используй объект System.Threading.Monitor он же самый lock.
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 07.01.2009
Сообщений: 8
|
![]()
Я то lock использовал
![]() НО какой это из трех методов? Ну не мьютекс, понятно))) Семафоры? События? Критические секции? Я запутался уже) |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 26.07.2009
Сообщений: 19
|
![]()
class AnyClass
{ public void IsMethodCallManyThread()-этот метод потенциально может быть вызван из различных потоков в один момент времени { lock(this)- это начало критической секции (какой - либо поток, который входит в эту критическую секцию захватывает блокировку предоставленную данным объектом "this" все остальные потоки становятся в очередь ожидая когда поток владеющий блокировкой отдаст ее следующему потоку { выполнение каких-либо действий над данными гаранитированно только одним потоком в момент времени } -конец критической секции (поток отдает блокировку потоку ожидающему в очереди } } использование оператора lock это тоже самое, что и использование класса Monitor с единственным различием, что в этом режиме доступны некоторые дополнительные возможности. class AnyClass { public void IsMethodCallManyThread()-этот метод потенциально может быть вызван из различных потоков в один момент времени { Monitor.Enter(this)- это начало критической секции try { выполнение каких-либо действий над данными гаранитированно только одним потоком в момент времени } finally { Monitor.Exit(this);-выход из критической секции } } |
![]() |
![]() |
![]() |
#8 |
Регистрация: 07.01.2009
Сообщений: 8
|
![]()
Спасибо.
Теперь такой вопрос. Как в C# использовать API функции ОС? Т.е. напрямую использовать API-функции работы с потоками. Не получается у меня объявить их ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с потоками | den49 | Помощь студентам | 0 | 06.10.2009 14:52 |
Работа с потоками | Нюська | Общие вопросы Delphi | 3 | 27.05.2009 00:52 |
Работа с потоками | Neymexa | Общие вопросы .NET | 16 | 23.04.2009 17:42 |
работа с потоками | Alex_Pro | Общие вопросы .NET | 1 | 01.07.2008 07:25 |
C++, работа с потоками | mat90x | Помощь студентам | 20 | 15.05.2008 22:20 |