众所周知,kthreadd是一个内核线程,用于帮助其他人创建新的内核线程(kthread_create_list查看是否需要创建任何新的内核线程).
但我不明白为什么我们不使用create_kthread创建新的内核线程?我认为kthreadd没有任何区别.
请你给我一些建议.
谢谢你的大力帮助.
我试图理解move-constructor的实现.我们都知道如果我们需要管理C++类中的资源,我们需要实现五阶规则(C++编程).
微软给我们举了一个例子:https://msdn.microsoft.com/en-us/library/dd293665.aspx
这是更好的一个,它使用copy-swap来避免代码重复: 动态分配一个对象数组
// C++11
A(A&& src) noexcept
: mSize(0)
, mArray(NULL)
{
// Can we write src.swap(*this);
// or (*this).swap(src);
(*this) = std::move(src); // Implements in terms of assignment
}
Run Code Online (Sandbox Code Playgroud)
在move-constructor中,直接:
// Can we write src.swap(*this);
// or (*this).swap(src);
Run Code Online (Sandbox Code Playgroud)
因为我觉得(*this) = std::move(src)有点复杂.因为如果我们(*this) = src无意中写,它会调用普通赋值运算符而不是move-assignment-operator.
除了这个问题,在微软的例子中,他们编写了这样的代码:在move-assignment-operator中,我们是否需要检查自我赋值?有可能发生吗?
// Move assignment operator.
MemoryBlock& operator=(MemoryBlock&& other)
{
std::cout << "In operator=(MemoryBlock&&). length = "
<< other._length << "." << std::endl;
if (this != &other)
{ …Run Code Online (Sandbox Code Playgroud) 最近,我正在尝试为Linux开发一个alsa驱动程序(实际上是Android TV).我遇到了一个关于alsa(alsa指的是Advanced Linux Sound Architecture)设备处理的问题
实际上,我已经研究了alsa-lib-1.0.27.1和tinyalsa(用于android设备)的部分源代码.我研究了三星设备的音频驱动程序.
用户空间应用程序使用/ dev/snd/pcmXXXXX来播放/捕获音频数据.但是,有一个问题.如果只有一个音频设备,它很好;
/dev/snd/
??? by-path
? ??? pci-0000:02:02.0 -> ../controlC0
??? controlC0
??? midiC0D0
??? pcmC0D0c
??? pcmC0D0p
??? pcmC0D1p
??? timer
Run Code Online (Sandbox Code Playgroud)
但是,如果有多个设备(例如,当我插入USB音频设备时).
/dev/snd/
??? by-path
? ??? pci-0000:02:02.0 -> ../controlC0
??? controlC0
??? controlC1 //new Control channel
??? midiC0D0
??? pcmC0D0c
??? pcmC0D0p
??? pcmC0D1p
??? pcmC1D0c //new card,new capture channel
??? pcmC1D0p //new card,new playback channel
??? timer
Run Code Online (Sandbox Code Playgroud)
用户应用程序如何正确处理这些设备.
三星司机让我很困惑.==> Linux的3.5.4 /设备/三星/克雷斯波/ libaudio/AudioHardware.cpp
status_t AudioHardware::AudioStreamInALSA::open_l()
{
//.....
ALOGV("open pcm_in driver");
TRACE_DRIVER_IN(DRV_PCM_OPEN)
mPcm …Run Code Online (Sandbox Code Playgroud)