【问题标题】:test_and_set_bit How It Works?test_and_set_bit 它是如何工作的?
【发布时间】:2021-09-26 09:45:59
【问题描述】:

有人可以在接受的答案下回答我的问题吗?

我正在阅读:https://www.kernel.org/doc/htmldocs/kernel-api/API-test-and-set-bit.html,但不太了解。

  • 如果该位已经为 1,它是保持 1 还是 0?

  • 如果它是 0 并且我没记错那么它会变为 1?

  • 这里的“位”是什么,输入可以是bool,是字节而不是位...

  • return 是否意味着在更改值后我们更改回其原始状态?如果是这样,那就没用了……

  • 在 C++ 中,当我尝试调用它时,我得到:

    使用未声明的标识符“test_and_set_bit”

抱歉,该页面根本不清楚。


用法:

typedef struct lock {
  bool is_locked;
} lock_t;

void init(lock_t* l) {
  l->is_locked = 0;
}

void lock(lock_t* l) {
  while (test_and_set_bit
    (l->is_locked));
}

void unlock(lock_t* l) {
  l->is_locked = 0;
}

【问题讨论】:

  • @DarkAtom its != it's
  • @MatG 是的,对不起
  • @DarkAtom 该死的自动更正

标签: c++ c linux kernel mutex


【解决方案1】:

如果该位已经为 1,它是保持 1 还是 0?

它将被设置为 1

如果它是 0 并且我没记错那么它会变为 1?

是的,它变成了 1

这里的“位”是什么,输入可以是字节而不是位的布尔值...

位是一位。不是一个字节。输入不能是布尔值。例如,如果您有一个 unsigned char,它由 8 位组成

return 是否意味着在更改值后我们更改回其原始状态?如果是这样,那就没用了……

没有。该函数将像以前一样返回该位的值。然后该函数将该位设置为 1

在 C++ 中,当我尝试调用它时,我得到:Use of undeclared identifier 'test_and_set_bit'

在标准 C++ 中,此功能不可用。它是一个在外部库中定义的函数。

【讨论】:

  • 1) 在 C 语言中不能正常工作吗? 2)请查看我的教授使用 bool 使用的更新代码
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 2015-06-16
  • 2012-08-31
  • 2012-07-13
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多