Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Luồng ngầm (Implicit Threading) và luồng dựa trên ngôn ngữ

Luồng ngầm (Implicit Threading)

Chuyển giao việc tạo/quản lý luồng từ lập trình viên sang trình biên dịch và thư viện runtime. Giúp giảm độ phức tạp và lỗi.

OpenMP (C/C++/Fortran)

Bộ chỉ thị trình biên dịch và API cho lập trình song song bộ nhớ chung.

Ví dụ:

#include <omp.h>
#include <stdio.h>

int main() {
    #pragma omp parallel
    {
        printf("I am a parallel region.\n");
    }
    return 0;
}

Khi gặp #pragma omp parallel, OpenMP tạo số luồng = số lõi CPU. Mỗi luồng thực thi vùng song song rồi kết thúc.

Tính năng: song song hóa vòng lặp, kiểm soát số luồng, dữ liệu shared/private.

Grand Central Dispatch (GCD) - Apple

Kết hợp mở rộng ngôn ngữ C, API và thư viện runtime. Sử dụng block (đơn vị công việc tự chứa) và dispatch queue (hàng đợi).

  • Serial queue: FIFO, thực thi tuần tự
  • Concurrent queue: FIFO nhưng có thể lấy nhiều block cùng lúc → song song

Ví dụ:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{ printf("This is a block.\n"); });

Luồng như đối tượng (Threads as Objects)

Java Threads

Kế thừa class Thread hoặc implement interface Runnable. Override phương thức run(). Khởi động bằng start().

Python Threads

Hai cách: thread.start_new_thread(func) (cơ bản) hoặc kế thừa threading.Thread với phương thức run() (linh hoạt hơn, hỗ trợ join).

Đồng thời như thiết kế ngôn ngữ (Concurrency as Language Design)

Go - Goroutines & Channels

Từ khóa go trước lời gọi hàm tạo goroutine. Kênh (channel) truyền thông message-passing.

go keyboardListener(messages)
success := <-messages  // Blocking read

Rust - Ownership & Thread Safety

Sử dụng thread::spawn() với closure. Mô hình ownership ngăn chặn data race: luồng con nhận bản sao riêng của biến (move), không chia sẻ bộ nhớ.

let mut a = 7;
let child = thread::spawn(move || { a -= 1; println!("a = {}", a); });
a += 1;
child.join();

Hai luồng không thể can thiệp bộ nhớ nhau → an toàn bởi thiết kế.