相关疑难解决方法(0)

虽然方法中的循环卡住了.向自身添加字段分配可以解决问题

开始我们的Semaphore项目,我给了我的学生一个糟糕的p()方法版本:

proc p() {
    while (this.tokens <= 0) {
        sleep(1);
        writeln("Tokens: ", this.tokens);
    }
    this.tokens -= 1;
}
Run Code Online (Sandbox Code Playgroud)

我给它们一些额外的代码来测试它,它增加了另一个线程中的令牌数量(使用v()方法).您可以看到令牌数量增加(大于0)但代码不会退出while循环.

一时兴起,我添加了一个任务声明:

proc p() {
    while (this.tokens <= 0) {
        this.tokens = this.tokens;
        sleep(1);
        writeln("Tokens: ", this.tokens);
    }
    this.tokens -= 1;
}
Run Code Online (Sandbox Code Playgroud)

这解决了测试运行中的问题(尽管它的线程安全性更低).为什么原始的while循环卡住了,为什么添加这个赋值可以解决它?

chapel

5
推荐指数
1
解决办法
124
查看次数

标签 统计

chapel ×1