我在终端上写道:
arr=(1 2 3)
for x in $arr; do
echo $x
done
Run Code Online (Sandbox Code Playgroud)
它只打印“ 1”。为什么不打印1 2 3?
我正在阅读“了解 Linux 内核,第 3 版”,在第 5 章“内核抢占”部分,它说:
所有进程切换都由
switch_to宏执行。在抢占式和非抢占式内核中,当进程完成内核活动的某个线程并调用调度程序时,会发生进程切换。但是,在非抢占式内核中,除非即将切换到用户模式,否则无法替换当前进程。
我仍然没有看到非抢占式内核和抢占式内核之间的区别,因为无论如何您都需要等待当前进程切换到用户模式。
假设有一个进程p在内核模式下运行,并且其时间片到期,然后scheduler_tick()调用 ,并设置p的NEED_RESCHED标志。但是只有在p切换到用户模式时才会调用(对吧?)。schedule()
那么如果p永远不会切换到用户模式呢?
如果它切换到用户模式,但在scheduler_tick()设置NEED_RESCHED的时刻和p实际切换到用户模式的时刻之间需要“很长”的时间——那么它使用的比它的量子还多?
例如,如果我声明一个变量a=8:
我有这堂课
class A {
unordered_map<string, unordered_set<string>> n_;
public:
A(unordered_map<string, unordered_set<string>>& n) : n_{n} {}
};
Run Code Online (Sandbox Code Playgroud)
我希望能够将构造函数与该语法一起使用
int main() {
A a{{"C", {"A", "B"}}};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是以现在的方式写的,我出错了
error: no matching function for call to `‘A::A(<brace-enclosed initializer list>)’ A a{{"C", {"A", "B"}}};`
Run Code Online (Sandbox Code Playgroud)
如何解决?
如果我在写作
grep -v "-NO" file
Run Code Online (Sandbox Code Playgroud)
它说
grep:无效选项 - 'N'
所以我需要写grep -v -- "-NO" file或grep -v "\-NO" file.
但是-,如果它是双引号,为什么它会识别为选项呢?