Так что я пытаюсь привлечь голову вокруг потоков, используя общие ресурсы. Примеры на C# corner (link 1) и msdn (ссылка 2) предоставляют основные примеры синтаксиса и некоторые теоретические кадрирования, поэтому основная предпосылка блокировки общего ресурса для процесса, который я понимаю. Теперь, мой вопрос:, обеспечивающий блокировки общих ресурсов.
При доступе к нескольким совместно используемым ресурсам в одном и том же кодовом блоке (в псевдокоде) ниже процесса цикла, который выдает URL-адрес из общего стека, оценивает текущий URL-адрес для общего списка уже проверенных URL-адресов, а затем перетаскивает загруженные данные в другой общий стек), мне нужно заключить каждый сегмент кода, относящийся к определенному общему ресурсу в инструкции блокировки?
Похоже, что структура «блокировка (эта) {}» в C# реализует «Монитор» (ссылка 3) в фоновом режиме, а Monitor.Enter и Monitor.Exit оба принимают только один объект в качестве параметра.
Честно говоря, я еще не закодировал это и протестировал его. но мне было интересно об этом, когда я читал, а потом, когда я составлял структуру кода (ниже «псевдокод»). Я капитализировал начальную и конечную точки структуры блокировки, где, как я подозреваю, они были, если мое предположение верно.
Любой, кто может уточнить/подтвердить это для меня?
(Поскольку я еще не приобрел необходимый рейтинг репутации, я разместил ссылки, подобные этому, вы можете найти их внизу; @mods: если я нарушил что-либо, сделав это, сообщите мне, и я изменю сообщение .)
program starts;
stack (urlsToCheck) is created (static, String);
list (checkedUrls) is created (static, String);
stack (unparsedHTML) is created (static, Tuple(string, Byte[]);
user provides seed url;
seed url is pushed to top op stack (urlsTocheck);
thread is created for Crawler method GetData();
<!--research possibilities for multiple threads in relation to stack sizes-->
<!--in case of multiple threads : threadpool + object (crawler) array?-->
thread is started:
Crawler 1 is created;
Crawler 1 starts method GetData:
loop:
<!--//check loop for lock/unlock locations//-->
Crawler 1 evaluates size of stack (unparsedHTML):
if(size > 100):
wait 1000 ms;
Crawler 1 evaluates size of stack (unparsedHTML);
else:
continue;
LOCK;
Crawler 1 evaluates size of stack (urlsToCheck):
if(size > 0):
Crawler 1 pops url from stack (urlsToCheck);
continue;
else:
wait 1000 ms;
Crawler 1 evaluates size of stack (urlsToCheck);
Crawler 1 evaluates url for membership in List (checkedUrls):
if(membership):
discard url;
pop url from stack (urlsToCheck);
evaluate url for membership in List (checkedUrls);
else:
continue;
UNLOCK;
LOCK;
Crawler 1 downloads data from url;
Crawler makes tuple of url and data;
Crawler pushes tuple onto stack (unparsedHTML);
UNLOCK;
end loop;
1) HTTP: // www.c-sharpcorner.com/UploadFile/mgold/MultithreadingIntro10062005000439AM/MultithreadingIntro.aspx
2) https: // msdn.microsoft.com/en- us/library/aa645740 (v = vs.71) .aspx
3) https: // msdn.microsoft.com/en-us/library/hf5 de04k% 28v = vs.110% 29.aspx
только что заметил, что я не удалял свои комментарии, вы canignore те -_- –