小编Bab*_*iff的帖子

正在访问指针元组和互斥锁线程安全的元组

鉴于std::tuple,

using Tuple1 = std::tuple<Foo1*, Bar1*, std::shared_ptr<std::mutex>>;
using Tuple2 = std::tuple<Foo2*, Bar2*, std::shared_ptr<std::mutex>>;
std::tuple<Tuple1, Tuple2> tuple;
Run Code Online (Sandbox Code Playgroud)

而功能,

void baz()
{
    auto tup = std::get<0>(tuple);

    std::lock_guard<std::mutex> lk(*std::get<2>(tup));

    // Do something with std::get<0>(tup) and std::get<1>(tup)
}
Run Code Online (Sandbox Code Playgroud)

根据这个关于SO的问题,访问a std::tuple本身并不是线程安全的,但是在示例代码的情况下呢?是否有可能发生未定义/奇怪的事情?

这是假设FooN&BarN只能在锁定后访问.

c++ concurrency multithreading tuples stdtuple

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

康威生命游戏的问题(在 Java 中)

我正在尝试用 Java 编写 conways 的生活游戏,但它没有正常工作。我的意思是,静物可以工作,但闪光灯和船只不行。

这是我的算法的代码,播种由单独的鼠标侦听器处理(按预期工作)。

    int[][] state1 = new int[80][80];
    int[][] state2 = new int[80][80];
    public void logic(){
        state2=state1;
        for(int i=0;i<80;i++){
            for(int j=0;j<80;j++){
                int sum=state1[(i-1+80)%80][j]+state1[(i-1+80)%80][(j-1+80)%80]+state1[i][(j-1+80)%80]+state1[(i+1)%80][(j-1+80)%80]+state1[(i+1)%80][j]+state1[(i+1)%80][(j+1)%80]+state1[i][(j+1)%80]+state1[(i-1+80)%80][(j+1)%80];

                if(sum!=2 && sum!=3){
                    state2[i][j]=0;
                }
                else if(sum==3){
                    state2[i][j]=1;
                }
            }
        }
        state1=state2;
    }
Run Code Online (Sandbox Code Playgroud)

java

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

标签 统计

c++ ×1

concurrency ×1

java ×1

multithreading ×1

stdtuple ×1

tuples ×1