Guest:
Register
|
Login
|
Member List
|
Search
|
Statistics
|
FAQ
Language
----------
Simplifed Chinese
Traditional Chinese
English
CnPack Forum
»
技术板块灌水区
» 在delphi中使用go语言的并发编程方法,增加demo2
‹‹ Last Thread
|
Next Thread ››
Poll
Trade
Reward
Activity
Printable Version
|
Email to Friend
|
Subscription
|
Favorites
Subject: 在delphi中使用go语言的并发编程方法,增加demo2
zzzl
(早安的空气)
版主
UID 590
Digest Posts 0
Credits 399
Posts 199
点点分 399
Reading Access 100
Registered 2004-11-29
Status Offline
#1
Post at 2010-11-30 11:38
Profile
|
Blog
|
P.M.
|
在delphi中使用go语言的并发编程方法,增加demo2
上一篇(
http://bbs.cnpack.org/viewthread.php?tid=9514&extra=page%3D1
)只提供了一个示例,可能不太容易说明什么,这里再增加一个例子。
{这个示例演示了经典的生产消费问题。
go的教程里就这个问题提供了一个Eratosthenes素数筛选法的例子,这里简化一下,演示筛选偶数吧}
我习惯把begin写成同一行,可能很多人不习惯。而这个问题在go语言里消失了,因为它要求{不能换行。
program
demo2
;
{$APPTYPE CONSOLE}
uses
SysUtils
,
coroutineUnit
;
//bug反馈:22140505@qq.com
begin
TProc
(
procedure
()
var
i
:
Integer
;
c
:
CChannel
<
Integer
>;
//声明一个通道,它可以携带一个整数,用于在两个线程之间传递
begin
c
:=
CChannel
<
Integer
>.
Create
;
go
(
//启动生产线程
procedure
()
var
i
:
Integer
;
begin
for
i
:=
1
to
10
do
//制作10个整数作为产品(好弱。。),交给产生线程
c
.
value
:=
i
;
c
.
value
:=-
1
;
//为-1时表示生产结束了(这属于这个模型的协议,我随意规定的)
end
);
go
(
//启动消费线程,它不停的接收整数产品,判断并输出为偶数的值
procedure
()
var
i
:
Integer
;
begin
while
true
do
begin
//不停的处理,但没有cpu消耗的
i
:=
c
.
value
;
//接收产品,如果没收到,就停在这等
if
i
=-
1
then
begin
//为-1时表示生产结束了(这属于这个模型的协议,我随意规定的)
c
.
Free
;
break
;
end
;
if
i
mod
2
=
0
then
writeln
(
inttostr
(
i
));
end
;
end
);
end
)();
Readln
;
end
.
Attachment
:
demo2.zip
(2010-11-30 11:38, 838 bytes)
Download count 50
zzzl
(早安的空气)
版主
UID 590
Digest Posts 0
Credits 399
Posts 199
点点分 399
Reading Access 100
Registered 2004-11-29
Status Offline
#2
Post at 2010-12-1 13:56
Profile
|
Blog
|
P.M.
|
说没有cpu消耗不太严谨,其实意思是说在下面的一行会进入等待状态
Poll
Trade
Reward
Activity
CnPack Forum
CnPack English Forum
> CnWizards IDE Wizards
> CVSTracNT
> Announcements & Others
All times are GMT++8, the time now is 2024-11-22 05:45
Powered by
Discuz!
5.0.0
© 2001-2006
Comsenz Inc.
Processed in 0.011606 second(s), 10 queries , Gzip enabled
TOP
Clear Cookies
-
Contact Us
-
CnPack Website
-
Archiver
-
WAP
Member's CP Home
Edit Profile
Credits Transaction
Public User Groups
Buddy List
Main
Page Views
User Agents
Posts History
Top Forums
Top Threads
Post Ranking
Credit Ranking
Online Time
Team
Moderation Stats