gpt4 book ai didi

multithreading - 主线程中的关键部分

转载 作者:行者123 更新时间:2023-12-03 18:57:18 26 4
gpt4 key购买 nike

我正在开发一个简单的多线程Web搜寻器。我正在使用一个sqlite数据库存储将被扫描的url。我只有一个数据库句柄,问题是主线程查询数据库以生成新线程。线程正在访问相同的句柄,但主线程还。

我为每个线程(包括主线程)定义了关键部分。但是,如果某个线程也位于临界区中,则主线程仍会继续执行代码。

这是一些代码:

  CreateDb;

InitializeCriticalSection(critical);

index := 0;

repeat
if threads < THREADS_MAX then
begin
EnterCriticalSection(critical);
try
sqldb.query('SELECT * FROM urls WHERE vizitat=0 AND id>' + IntToStr(index));
urlcount:= sqldb.rowcount;

for i:= 1 to urlcount do
begin
WriteLn(sqldb.Fs('adresa'));
sqldb.next;
index := sqldb.Fi('id');
with TPageCrawl.Create(@threads,sqldb.Fs('adresa'),index,sqldb) do;
if threads = THREADS_MAX then break;
end;
LeaveCriticalSection(critical);
except
LeaveCriticalSection(critical);
Continue;
end;
end;

Write(logo);
Sleep(1000);
until (threads = 0) and (urlcount < 1);

最佳答案

I have defined critical sections for each of the threads



他们必须都使用相同的关键部分才能正确锁定。如果它们都有各自的关键部分,则这些锁仅适用于自己。

我假设您的线程在 TPageCrawl中,您可以在调用的关键部分中进行传递:
TPageCrawl.Create(critical,@threads,sqldb.Fs('adresa'),index,sqldb)

然后,在您的线程proc中,您可以根据需要 EnterCriticalSection()LeaveCriticalSection()

关于multithreading - 主线程中的关键部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14601409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com