Skip to content
神梦无痕 edited this page Jun 29, 2021 · 3 revisions
'===============【100个线程并发计数】===============
'  作者:神梦无痕
'  QQ:1042207232
' Q群:624655641
'==================================================

DimEnv 互斥锁, 事件锁, 自旋锁, 多线程_计数

//初始化命令库,使用前必须调用该命令
Call Lib.神梦_多线程._初始化()

//=========================演示互斥锁=========================
多线程_计数 = 0
t = Timer()
TracePrint "开始演示多线程中使用【互斥锁】。。。"
'创建互斥体锁
互斥锁 = Lib.神梦_多线程.互斥锁创建()
For 100
    BeginThread 多线程A
Next
While 多线程_计数 < 10000
    Delay 100
Wend
'销毁互斥体锁  
Call Lib.神梦_多线程.互斥锁销毁(互斥锁)
提示 = "多线程中使用【互斥锁】计数10000次耗时:" & Timer() - t & " 秒"
MsgBox 提示, 64+4096, "【互斥锁】"  : TracePrint 提示

//=========================演示事件锁=========================
多线程_计数 = 0
t = Timer()
TracePrint "开始演示多线程中使用【事件锁】。。。"
'创建事件
事件锁 = Lib.神梦_多线程.事件创建()
For 100
    BeginThread 多线程B
Next
While 多线程_计数 < 10000
    Delay 100
Wend
'销毁事件锁 
Call Lib.神梦_多线程.事件销毁(事件锁)
提示 = "多线程中使用【事件锁】计数10000次耗时:" & Timer() - t & " 秒"
MsgBox 提示, 64+4096, "【事件锁】"  : TracePrint 提示

//=========================演示自旋锁=========================
多线程_计数 = 0
t = Timer()
TracePrint "开始演示多线程中使用【自旋锁】。。。"
'创建自旋锁   
自旋锁 = Lib.神梦_多线程.自旋锁创建()  
For 100
    BeginThread 多线程C
Next
While 多线程_计数 < 10000
Wend
'自旋锁不需要销毁操作
提示 = "多线程中使用【自旋锁】计数10000次耗时:" & Timer() - t & " 秒"
MsgBox 提示, 64+4096, "【自旋锁】"  : TracePrint 提示

Sub 多线程A()
    '  作者:神梦无痕
    '  QQ:1042207232
    ' Q群:624655641
    Call Lib.神梦_多线程.互斥锁进入(互斥锁)
    '以下 进入许可区后,要操作的功能函数代码
    For 100
        多线程_计数 = 多线程_计数 + 1
    Next
    TracePrint 多线程_计数
    Call Lib.神梦_多线程.互斥锁退出(互斥锁)'退出要跟进入许可区配对使用。
End Sub
Sub 多线程B()
    '  作者:神梦无痕
    '  QQ:1042207232
    ' Q群:624655641
    Call Lib.神梦_多线程.事件进入(事件锁)
    '以下 进入许可区后,要操作的功能函数代码
    For 100
        多线程_计数 = 多线程_计数 + 1
    Next
    TracePrint 多线程_计数
    Call Lib.神梦_多线程.事件退出(事件锁)'退出要跟进入许可区配对使用。
End Sub
Sub 多线程C()
    '  作者:神梦无痕
    '  QQ:1042207232
    ' Q群:624655641
    Call Lib.神梦_多线程.自旋锁进入(自旋锁)
    '以下 进入许可区后,要操作的功能函数代码
    For 100
        多线程_计数 = 多线程_计数 + 1
    Next
    TracePrint 多线程_计数
    Call Lib.神梦_多线程.自旋锁退出(自旋锁)'退出要跟进入许可区配对使用。
End Sub

Clone this wiki locally