小编Don*_*guo的帖子

内核线程---"kthreadd"

众所周知,kthreadd是一个内核线程,用于帮助其他人创建新的内核线程(kthread_create_list查看是否需要创建任何新的内核线程).

但我不明白为什么我们不使用create_kthread创建新的内核线程?我认为kthreadd没有任何区别.

请你给我一些建议.

谢谢你的大力帮助.

linux kernel

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

最佳C++移动构造函数实现实践

我试图理解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)

c++ move move-constructor c++11

4
推荐指数
2
解决办法
2477
查看次数

关于ALSA驱动程序:如何正确处理音频设备

最近,我正在尝试为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)

audio android alsa linux-device-driver

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