小编alf*_*ngj的帖子

Kotlin的单身人士线程安全吗?

Kotlin单身人士(更具体地说,对象声明)是否通过构造进行线程安全?如果没有,在Kotlin中编写线程安全单例的最佳做法是什么?

我猜它们是,但我无法在文档中找到任何关于它的明确声明.

singleton thread-safety kotlin

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

带有围栏和获取/释放的C++ memory_order

我有以下C++ 2011代码:

std::atomic<bool> x, y;
std::atomic<int> z;

void f() {
   x.store(true, std::memory_order_relaxed);
   std::atomic_thread_fence(std::memory_order_release);
   y.store(true, std::memory_order_relaxed);
}

void g() {
   while (!y.load(std::memory_order_relaxed)) {}
   std::atomic_thread_fence(std::memory_order_acquire);
   if (x.load(std::memory_order_relaxed)) ++z;
}

int main() {
   x = false;
   y = false;
   z = 0;
   std::thread t1(f);
   std::thread t2(g);
   t1.join();
   t2.join();
   assert(z.load() !=0);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的计算机体系结构类中,我们被告知此代码中的断言始终成立.但经过现在的审查,我无法理解为什么会这样.

据我所知:

  • 带有' memory_order_release '的栅栏不允许在它之后执行先前的存储
  • 带有' memory_order_acquire '的栅栏不允许在它之后执行任何加载.

如果我的理解是正确的,为什么不能发生以下一系列行动?

  1. 在t1里面,y.store(true, std::memory_order_relaxed);被称为
  2. t2完全运行,并且在加载'x'时会看到'false',因此不会在单位中增加z
  3. t1完成执行
  4. 在主线程中,断言失败,因为z.load()返回0

我认为这符合'获取' - '发布'规则,但是,例如在这个问题的最佳答案:理解c ++ 11内存栅栏,这与我的情况非常相似,它暗示我的步骤1动作序列不能在'memory_order_release'之前发生,但是由于其背后的原因没有详细说明.

我对此感到非常困惑,如果有人能说清楚它会很高兴:)

c++ multithreading synchronization c++11

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

下载 Metaplex 集合的帐户鉴别器无效

我从锚点 0.17 更新到版本 0.24,从那时起,获取收款帐户失败并出现锚点错误,如下所示: Error: Invalid account discriminator

这是我的代码

export const getCollectionPDA = async (candyMachineAddress: string): Promise<anchor.web3.PublicKey> => {
    return (
        await anchor.web3.PublicKey.findProgramAddress(
            [Buffer.from("collection"), new PublicKey(candyMachineAddress).toBuffer()],
            new PublicKey(CANDY_MACHINE_PROGRAM_V2)
        )
    )[0];
};

const provider = new AnchorProvider(connection, getmywallet(), {
       preflightCommitment: "finalized",
       commitment: "finalized",
});

const idl = await Program.fetchIdl(CANDY_MACHINE_PROGRAM_V2, provider);
const anchorProgram = new Program(idl, CANDY_MACHINE_PROGRAM_V2, provider);

const candyMachineId = "63gzhYWxJ4Yfc5QahLxV6NChSjJZNWW93Sy9CHz8YkCe";
const collectionPDA = await getCollectionPDA(candyMachineId);
const collectionPDAAccount = await connection.getAccountInfo(collectionPDA);

const collectionData = await anchorProgram.account.collectionPda.fetch(new PublicKey(collectionPDA.toString()));
Run Code Online (Sandbox Code Playgroud)

我想知道这是怎么回事。也许集合帐户结构已更新并且区块链包含旧结构?直到最近主播才开始检查这一点?

solana metaplex candy-machine

9
推荐指数
0
解决办法
306
查看次数

剪辑规则和功能

你好,我有几个问题:

  1. 我可以修改剪辑中函数中的事实,还是可以使用事实而不将其作为函数调用的参数。
  2. 我可以在规则中生成随机数吗?
  3. 我可以在另一个规则中执行某个规则吗?
  4. 我可以在函数中进行模式匹配吗?

clips

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