ইম্প্লিসিট থ্রেডিং
থ্রেড ম্যানেজমেন্টের দায়িত্ব অ্যাপ্লিকেশন ডেভেলপার থেকে কম্পাইলার/রানটাইম লাইব্রেরিতে হস্তান্তর করা হয়। এটি বর্তমানের জনপ্রিয় প্রবণতা।
OpenMP (C/C++/Fortran)
- কম্পাইলার ডিরেক্টিভ (`#pragma omp parallel`) দিয়ে প্যারালল রিজন চিহ্নিত করা হয়
- রানটাইম লাইব্রেরি স্বয়ংক্রিয়ভাবে থ্রেড পুল ম্যানেজ করে
- লুপ প্যারাললাইজেশন, শেয়ার্ড/প্রাইভেট ডেটা নিয়ন্ত্রণ সুবিধা
#pragma omp parallel
printf("I am a parallel region.");
Grand Central Dispatch (GCD) — Apple
- C/C++ এক্সটেনশন: ব্লক (`^ { ... }`)
- ডিসপ্যাচ কিউ (সিরিয়াল/কনকারেন্ট) দিয়ে টাস্ক শিডিউল
- থ্রেড পুল স্বয়ংক্রিয়ভাবে রিসোর্স অনুযায়ী আকার বদলায়
জাভা থ্রেড
Threadক্লাস বাRunnableইন্টারফেসrun()মেথড ওভাররাইড করুন,start()দিয়ে চালু করুন
পাইথন থ্রেডিং
threading.Threadক্লাস এক্সটেন্ড করেrun()ইমপ্লিমেন্ট করুনstart()ওjoin()দিয়ে নিয়ন্ত্রণ
Go: গোরুটিন ও চ্যানেল
go func()দিয়ে লাইটওয়েট থ্রেড (গোরুটিন) সৃষ্টি- চ্যানেল দিয়ে মেসেজ পাসিং (CSP মডেল)
- কনকারেন্সি ল্যাঙ্গুয়েজ ডিজাইনের কেন্দ্রে
Rust: সेफ কনকারেন্সি
thread::spawn(|| { ... })দিয়ে থ্রেড সৃষ্টি- Ownership মডেল: ডেটা রেস কম্পাইল টাইমে রোধ করা হয়
moveকীওয়ার্ড দিয়ে ডেটা কপি/ট্রান্সফার
উদাহরণ (Rust)
use std::thread;
fn main() {
let mut a = 7;
let child = thread::spawn(move || {
a -= 1;
println!("a = {}", a);
});
a += 1;
println!("a = {}", a);
child.join().unwrap();
}