2016-03-31 17 views
5

Nếu tôi có sau chức năng thread hạt nhân:Có cần thiết phải sử dụng kthread_stop nếu chúng ta quay trở lại từ chuỗi hạt nhân không?

int thread_fn() { 
    printk(KERN_INFO "In thread1");  
    return 0; 
} 

Tôi vẫn cần phải sử dụng chức năng kthread_stop() đây?

Liệu return trong chức năng chuỗi có làm cho dừng và thoát chuỗi hạt nhân không?

+0

Tôi đoán bạn sẽ có thể biết bằng cách xem mã bắt đầu một chuỗi và xem liệu nó có thiết lập ngăn xếp của chuỗi có địa chỉ trả về sẽ ở đâu đó không. –

Trả lời

1

Nếu bạn xem cách kthread()implemented, tại dòng 209, hãy gọi threadfn(data) và lưu trữ mã thoát trong ret; sau đó nó gọi do_exit(ret).

Vì vậy, trở lại đơn giản từ threadfn của bạn là đủ.

Nếu bạn nhìn vào tài liệu của kthread_stop, nó nói rằng nó:

  • bộ kthread_should_stop để return true;
  • đánh thức luồng;
  • đợi chuỗi thoát.

Điều này có nghĩa là chỉ nên gọi từ kthread_stop() từ bên ngoài một sợi để dừng chỉ. Vì nó đợi thread kết thúc, bạn không được gọi nó trong thread hoặc bạn có thể bế tắc!

Hơn nữa, tài liệu nói rằng nó chỉ thông báo cho chuỗi mà nó nên thoát ra, và rằng thread nên gọi kthread_should_stop để tìm hiểu về điều này. Vì vậy, một dài sống threadfn có thể làm điều này:

int thread_fn() { 
    printk(KERN_INFO "In thread1"); 
    while (!kthread_should_stop()) { 
     get_some_work_to_do_or_block(); 
     if (have_work_to_do()) 
      do_work(); 
    } 
    return 0; 
} 

Nhưng nếu chức năng của bạn là không tồn tại lâu dài, gọi kthread_should_stop là không cần thiết.

Các vấn đề liên quan