18. 作业和线程的 Boost 包

JOBQUE boost 模块实现了 :ref:`JOBQUE <stdlib_jobque>`附带的辅助宏和函数的集合。

所有函数和符号都在 “jobque_boost” 模块中,使用 require 来访问它。

require daslib/jobque_boost

18.1. Function annotations

NewJobMacro

此宏处理 new_jobnew_thread 调用。 调用相应地替换为`new_job_invoke`和`new_thread_invoke`。 将为 Lambda 生成克隆 infastructure,并在新上下文中调用该 lambda。

18.2. 调用

new_job(l: lambda<>)

argument

argument type

l

lambda<>

创建新作业。
  • 从当前上下文克隆新上下文。

  • Lambda 被克隆到新上下文。

  • 新作业已添加到作业队列中。

  • 调用新作业后,将在作业线程上的新上下文上调用 Lambda。

请注意,如果 job-que 存在,则永远不会调用此函数。

new_thread(l: lambda<>)

argument

argument type

l

lambda<>

创建新线程
  • 从当前上下文克隆新上下文。

  • Lambda 被克隆到新上下文。

  • 创建新线程。

  • lambda 在新线程上的新上下文上调用。

请注意,如果存在 job-que,则永远不会调用

18.3. 迭代

for_each(channel: Channel? const; blk: block<(res:auto(TT) const#):void> const)

for_each returns auto

Warning

This function is deprecated.

argument

argument type

channel

jobque::Channel ? const

blk

block<(res:auto(TT) const#):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 通道耗尽后停止(内部 Entry 计数器为 0) 这可能会同时发生在多个线程或作业上。

each(channel: Channel?; tinfo: auto(TT) const)

each returns auto

Warning

此函数已弃用。

argument

argument type

channel

jobque::Channel ?

tinfo

auto(TT) const

这个迭代器用于按照 Channel 的推送顺序迭代 Channel。 一旦 Channel 耗尽,iterator 就会停止(内部 entry counter 为 0) 迭代可以同时发生在多个线程或作业上。

18.4. 传递数据

push_clone(channel: Channel? const; data: auto(TT) const)

push_clone returns auto

argument

argument type

channel

jobque::Channel ? const

data

auto(TT) const

克隆数据并将值推送到通道(在末尾)

push(channel: Channel? const; data: auto? const)

push returns auto

argument

argument type

channel

jobque::Channel ? const

data

auto? const

将值推送到通道(末尾)

18.5. 内部捕获详细信息

capture_jobque_channel(ch: Channel? const)

capture_jobque_channel returns jobque::Channel ?

argument

argument type

ch

jobque::Channel ? const

此函数用于捕获 jobque 使用的通道。

capture_jobque_job_status(js: JobStatus? const)

capture_jobque_job_status returns jobque::JobStatus ?

argument

argument type

js

jobque::JobStatus ? const

此函数用于捕获 jobque 使用的作业状态。

release_capture_jobque_channel(ch: Channel? const)

argument

argument type

ch

jobque::Channel ? const

该函数用于释放 jobque 使用的频道。

release_capture_jobque_job_status(js: JobStatus? const)

argument

argument type

js

jobque::JobStatus ? const

该函数用于释放 JobQue 使用的 Job Status。

18.6. 未分类

capture_jobque_lock_box(js: LockBox? const)

capture_jobque_lock_box returns jobque::LockBox ?

argument

argument type

js

jobque::LockBox ? const

此函数用于捕获 Jobque 使用的锁箱。

release_capture_jobque_lock_box(js: LockBox? const)

argument

argument type

js

jobque::LockBox ? const

此函数用于释放 Jobque 使用的 lock box。

gather(ch: Channel? const; blk: block<(arg:auto(TT) const#):void> const)

gather returns auto

argument

argument type

ch

jobque::Channel ? const

blk

block<(arg:auto(TT) const#):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 之后 input 被消耗

gather_ex(ch: Channel? const; blk: block<(arg:auto(TT) const#;info:TypeInfo const? const;var ctx:Context):void> const)

gather_ex returns auto

argument

argument type

ch

jobque::Channel ? const

blk

block<(arg:auto(TT) const#;info: rtti::TypeInfo const? const;ctx: rtti::Context ):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 之后 input 被消耗

gather_and_forward(ch: Channel? const; toCh: Channel? const; blk: block<(arg:auto(TT) const#):void> const)

gather_and_forward returns auto

argument

argument type

ch

jobque::Channel ? const

toCh

jobque::Channel ? const

blk

block<(arg:auto(TT) const#):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 之后 input 被消耗

peek(ch: Channel? const; blk: block<(arg:auto(TT) const#):void> const)

peek returns auto

argument

argument type

ch

jobque::Channel ? const

blk

block<(arg:auto(TT) const#):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 之后,不消耗 input

for_each_clone(channel: Channel? const; blk: block<(res:auto(TT) const#):void> const)

for_each_clone returns auto

argument

argument type

channel

jobque::Channel ? const

blk

block<(res:auto(TT) const#):void> const

从通道读取 Input(按推送顺序)并在每个 Importing 上调用 Block。 通道耗尽后停止(内部 Entry 计数器为 0) 这可能会同时发生在多个线程或作业上。

pop_one(channel: Channel? const; blk: block<(res:auto(TT) const#):void> const)

pop_one returns auto

Warning

This function is deprecated.

argument

argument type

channel

jobque::Channel ? const

blk

block<(res:auto(TT) const#):void> const

从 Channel 中读取一个命令

pop_and_clone_one(channel: Channel? const; blk: block<(res:auto(TT) const#):void> const)

pop_and_clone_one returns auto

argument

argument type

channel

jobque::Channel ? const

blk

block<(res:auto(TT) const#):void> const

从 Channel 中读取一个命令

push_batch_clone(channel: Channel? const; data: array<auto(TT)> const)

push_batch_clone returns auto

argument

argument type

channel

jobque::Channel ? const

data

array<auto(TT)> const

克隆数据并将值推送到通道(在末尾)

push_batch(channel: Channel? const; data: array<auto?> const)

push_batch returns auto

argument

argument type

channel

jobque::Channel ? const

data

array<auto?> const

将值推送到通道(在末尾)

set(box: LockBox? const; data: auto(TT) const)

set returns auto

argument

argument type

box

jobque::LockBox ? const

data

auto(TT) const

将值设置为锁箱

set(box: LockBox? const; data: auto? const)

set returns auto

argument

argument type

box

jobque::LockBox ? const

data

auto? const

将值设置为锁箱

get(box: LockBox? const; blk: block<(res:auto(TT) const#):void> const)

get returns auto

argument

argument type

box

jobque::LockBox ? const

blk

block<(res:auto(TT) const#):void> const

从锁箱中读取值并调用其上的块

update(box: LockBox? const; blk: block<(var res:auto(TT)#):void> const)

update returns auto

argument

argument type

box

jobque::LockBox ? const

blk

block<(res:auto(TT)#):void> const

更新锁定框中的值,并调用其上的代码块

clear(box: LockBox? const; type_: auto(TT) const)

clear returns auto

argument

argument type

box

jobque::LockBox ? const

type_

auto(TT) const

从锁框中清除值

each_clone(channel: Channel?; tinfo: auto(TT) const)

each_clone returns auto

argument

argument type

channel

jobque::Channel ?

tinfo

auto(TT) const

该迭代器用于按照通道推送的顺序对通道进行迭代。一旦通道耗尽(内部入口计数器为 0), ,迭代器就会停止。 迭代可以同时在多个线程或工作上进行。