Coroutine::getPcid
最后更新于:2022-04-02 06:25:49
# Coroutine::getPcid
[TOC]
> 需要v4.3.0及以上
## API
~~~
function Coroutine::getPcid() : int
~~~
## 例子
~~~
echo Co::getPcid(), "\n";
go(function () {
echo Co::getPcid(), "\n";
go(function () {
echo Co::getPcid(), "\n";
go(function () {
echo Co::getPcid(), "\n";
go(function () {
echo Co::getPcid(), "\n";
});
go(function () {
echo Co::getPcid(), "\n";
});
go(function () {
echo Co::getPcid(), "\n";
});
});
echo Co::getPcid(), "\n";
});
echo Co::getPcid(), "\n";
});
echo Co::getPcid(), "\n";
~~~
### 输出
> 0作为未来保留的主协程id, 目前不会作为返回值
>
> 非嵌套协程调用`getPcid`将返回-1 (从非协程空间创建的)
>
> 在非协程内调用`getPcid`将返回-1 (非协程没有父协程, 指向自己)
~~~
-1
-1
1
2
3
3
3
1
-1
-1
~~~
## 注意
协程之间并没有实质上的持续父子关系, 协程之间是相互隔离, 独立运作的 此Pcid可理解为创建了当前协程的协程id
## 用途
### 串联多个协程调用栈
~~~
go(function () {
go(function () {
$ptrace = Co::getBackTrace(Co::getPcid());
// balababala
var_dump(array_merge($ptrace, Co::getBackTrace(Co::getCid())));
});
});
~~~
Implemented in:[A](https://github.com/swoole/swoole-src/commit/6812049a1cd478535ed94025a96884ee34d0016c)[B](https://github.com/swoole/swoole-src/commit/1884d60fe6af880ef781399a4544014128f02ac7)
';