1. header file
#include <linux/kthread.h>
2. Defining variables
static pid_t thread_id;/ /thread idstatic struct completion th_exit; //synchronous semaphore
3. Initialization
Init_completion (&th_exit);
4. Thread creation
thread_id = Kernel_thread (fuction, NULL, CLONE_FS | Clone_files);
6. Thread function entity
int fuction0 (void *arg) { daemonize ("Mythread"); Release resources? Allow_signal (SIGKILL); The definition of the accept signal while (!signal_pending (current))//Return not 0 indicates a signal processing {silabs_device_start (0); Task function schedule (); Thread hibernation, scheduling other threads}complete_and_exit (&th_exit0, 1); Received semaphore, exit thread}
7. Task function and Semaphore
silabs_device_start{... ... kill_proc (thread_id,), ... ..... ........----------------------------------- SIGTERM, 1); Kill thread Wait_for_completion (&th_exit); Activate semaphore}
Linux Drivers-Multithreading