نخ thread
نگهداشتن و منتظر ماندن برای نخهایی که با spawn ساخته میشوند.
واردسازی نخ
در سلام، روالی را که باید همزمان با بقیهی برنامه اجرا شود با spawn راه میاندازید. spawn روالی بیورودی و بیخروجی میگیرد و یک عدد بهعنوان «دسته»ی نخ برمیگرداند. با join یا نخ.پیوستن صبر میکنید تا آن نخ تمام شود.
بستهی نخ این دسته را در گونهی نخ میپیچد تا بتوانید چند نخ را در یک وکتور نگه دارید و همه را یکجا منتظر بمانید. نخها حافظهی سراسری را با هم شریکاند؛ برای کار با دادهی مشترک از همگام سازی یا اتمی استفاده کنید.
گونهها
نخ Thread
ساختار نخ| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| handle | handle | صحیح۶۴ = 0 | دستهای که spawn برگردانده؛ صفر یعنی نامعتبر. |
واردسازی نخ
واردسازی همگام سازی
ناپایا جمع := ۰
ناپایا قفل := همگام سازی.قفل {}
روال کارگر():
تکرار ۱۰۰۰:
همگام سازی.قفل کردن(قفل)
جمع += ۱
همگام سازی.باز کردن قفل(قفل)
پایان
پایان
روال ریشه:
قفل = همگام سازی.قفل جدید()
اول := نخ.جدید(spawn(کارگر))
سرچاپ نخ.معتبر(اول)، نخ.دسته(اول) != ۰
ناپایا گروه := وکتور {} برگردان وکتور<نخ.نخ>
دیرکن گروه.آزادکن()
تکرار ۳:
گروه = نخ.جمع آوری(گروه، spawn(کارگر))
پایان
نخ.پیوستن(اول)
نخ.پیوستن به همه(گروه)
سرچاپ گروه.طول()، جمع
خالی := نخ.جدید(۰)
سرچاپ نخ.معتبر(خالی)، خالی.handle
نخ.پیوستن(خالی)
همگام سازی.نابودسازی(قفل)
پایانروالها
جدید New
روال جدید(h: صحیح۶۴): نخspawn را در یک نخ میپیچد.نمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam
پیوستن Join
روال پیوستن(t: نخ)نمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam
پیوستن به همه JoinAll
روال پیوستن به همه(threads: وکتور<نخ>)نمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam
معتبر Valid
روال معتبر(t: نخ): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam
دسته Handle
روال دسته(t: نخ): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam
جمع آوری Collect
روال جمع آوری(threads: وکتور<نخ>، h: صحیح۶۴): وکتور<نخ>نمونهی این مورد همراه با موارد بالاتر آمده است: thread-Join.salam