semaphore, completion 和 wait_queue
semaphore 和 completion 都要使用 wait_queue_t 来实现休眠。
但completeion 和 semaphore 本质都是整数 P, V操作和对0的判断;
而用户定义的 wait_queue_t 可以实现自己的操作和 休眠判断。
semaphore 和 completion 都是是同步机制(防止并发访问的冲突)。
wait_queue 是进程休眠和唤醒的机制。
设备可以有自己的 wait_queue, 而每个semaphore 和 completion 内部也有wait_queue。