小编Bi *_* Ao的帖子

如何从命令行确定我的 KDE 桌面是否处于锁定屏幕状态?

我有一个在后台运行的程序,它只是每 N 秒截取一次屏幕截图。

例如:

#!/bin/sh

while true; do
  take-screenshot
  sleep 10
done

Run Code Online (Sandbox Code Playgroud)

我想要实现的只是在屏幕未锁定的情况下截取屏幕截图。例如:

#!/bin/sh

while true; do
  if ! screen-is-locking; then
    take-screenshot
    sleep 10
  fi
done
Run Code Online (Sandbox Code Playgroud)

如何确定我的桌面是否在命令行中锁定?

linux x11 desktop kde-plasma

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

以原子方式交换两个指针的值

我了解到信号量可以充当原子锁,可以执行两个功能:downup

有没有办法以value原子方式交换两个指针,避免竞争条件和死锁。

我首先想出了“解决方案”,假设两个指针都有:

Item a = { value = "A", lock = Semaphore(1) }
Item b = { value = "B", lock = Semaphore(1) }

void atomic_swap(Item* a, Item* b) {
    a->lock.down(); // acquire
    b->lock.down(); // acquire
    
    non_atomic_swap(&a.value, &b.value);

    b->lock.up(); // release
    a->lock.up(); // release
}
Run Code Online (Sandbox Code Playgroud)

atomic_swap但如果我没记错的话,如果使用相同的指针调用两个,则会导致死锁:例如。

Item a = ...;
Item b = ...;
thread_start(atomic_swap, {&a, &b}); // start a thread running atomic_swap(&a, &b);
thread_start(atomic_swap, {&b, &a}); // start a thread …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading mutex semaphore race-condition

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