GO Sync.Once 使用

sync.Once 用于确保某个函数只执行一次,无论有多少个 goroutine 尝试执行它。它有一个方法 Do(f func()),传入需要执行的函数。

基本用法示例:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var once sync.Once
    done := make(chan bool)

    // 模拟多个 goroutine 调用
    for i := 0; i < 10; i++ {
        go func(x int) {
            // once.Do() 传入的函数只会执行一次
            once.Do(func() {
                fmt.Printf("只执行一次: %d\n", x)
            })
            // 这行每个 goroutine 都会执行
            fmt.Printf("goroutine %d 完成\n", x)
            done <- true
        }(i)
    }

    // 等待所有 goroutine 完成
    for i := 0; i < 10; i++ {
        <-done
    }
}

常见使用场景:

Archlinux Rdp 连接问题

如果你在非 Windows 端使用 RDP 协议远程控制一台登录微软账号的 Windows,那么连接时输入的用户名可能不是你的微软账号(邮箱),也不是去掉邮箱后缀后的剩余部分,更不是 Administrator,而是其他值,可以在被控端执行 echo %USERNAME% 查看,这个值虽然是自己设置的,但是系统设置里完全找不到,我试了半天真是有被气到。

Archlinux 中 Nvidia 驱动导致的 KDE Plasma 相关问题

本文针对 Turing (NV160/TUXXX) 及之后型号的显卡,可以通过 lspci -k | grep -A 2 -E "(VGA|3D)" 查看显卡型号

在 Linux 平台下 Nvidia 的驱动分为 3 种

官方驱动不论是闭源还是半开源,在游戏方面的性能都远好于第三方开源驱动。 带有 dkms 后缀的版本与不带的版本区别在于,不带后缀的版本用于 linux 标准内核,而带后缀的版本用于其他内核。

问题及解决方案

官方内核

在驱动更新到 555 主版本号之后会出现 KDE Plasma 动画卡顿和掉帧的情况,这是由于 Nvidia 官方引入的 GSP(RISC-V 处理器) 不稳定导致的。 在目前的驱动版本(560)中该问题仍然存在,可以通过禁用 GSP 解决,但是只有闭源驱动可以禁用 GSP,半开源驱动无法实现。