Mavzularning foydalanuvchi rejimida amalga oshirilishi . Tizim chaqiruvi va kontekstni o'zgartirish juda og'ir operatsiyalar bo'lgani uchun, foydalanuvchi rejimida oqimni qo'llab-quvvatlashni amalga oshirish g'oyasi uzoq vaqtdan beri mavjud. Ko'p urinishlar qilingan, ammo ushbu uslub mashhurlikka erishmagan:
GNU Portable Threads - bu Posix Threads-ning foydalanuvchi rejimida amalga oshirilishi. Asosiy afzallik - bu kutubxonaning yuqori portativligi, boshqacha qilib aytganda, uni boshqa operatsion tizimlarga osongina ko'chirish. Ushbu kutubxonada oqimni siqish muammosi juda sodda tarzda hal qilindi - unda oqimlar siqilmaydi :) Va, albatta, biz biron bir ko'p ishlov berish haqida gapira olmaymiz. Ushbu kutubxona N: 1 modelini amalga oshiradi.
Men bir necha bor eslatib o'tgan uglerod oqimlari va RealBasic oqimlari.
Gibrid dastur . Birinchi va ikkinchi yondashuvlarning barcha afzalliklaridan foydalanishga urinish, ammo qoida tariqasida bunday mutantlarning afzalliklaridan ko'ra ko'proq kamchiliklari bor. Bir misol: NetBSD-da Posix Threads-ni N: M modeli yordamida amalga oshirish, keyinchalik uning o'rnini 1: 1 tizim egallagan. Qo'shimcha ma'lumot olish uchun Rejalashtirishni faollashtirish: Parallelismni foydalanuvchi darajasida boshqarish uchun samarali yadro yordami.
Win32 API mavzulari
Agar siz hali ham charchamasangiz, men win32 API-da oqimlar va sinxronizatsiya vositalari bilan ishlash uchun API haqida qisqacha ma'lumot beraman. Agar siz allaqachon material bilan tanish bo'lsangiz, ushbu bo'limni xavfsiz o'tkazib yuborishingiz mumkin;)
Win32-dagi satrlar CreateThread funktsiyasi yordamida yaratiladi, bu erda funktsiyaga ko'rsatgichni uzatamiz (uni thread funktsiyasi deb ataymiz), yaratilgan oqimda bajariladi. Oqim funktsiyasi bajarilganda oqim to'liq hisoblanadi. Agar siz oqimning tugashiga ishonch hosil qilishni istasangiz, TerminateThread funktsiyasidan foydalanishingiz mumkin, lekin uni ortiqcha ishlatmang! Ushbu funktsiya oqimni "o'ldiradi" va u har doim ham uni to'g'ri bajarolmaydi. ExitThread funktsiyasi thread funktsiyasi tugagandan so'ng bevosita chaqiriladi yoki siz ushbu funktsiyani o'zingiz chaqirishingiz mumkin. Uning asosiy vazifasi oqimlar to'plamini va uning tutqichini bo'shatishdir, ya'ni. ushbu oqimga xizmat qiladigan yadro tuzilmalari.
Win32 oqimi uyqu holatida bo'lishi mumkin (to'xtatib turish). SuspendThread funktsiyasini chaqirish orqali "oqimni sustlash" va ResumeThread-ni chaqirish orqali "uni uyg'otish" mumkin yoki CreateThread funktsiyasining CreateSuspended parametrining qiymatini belgilash orqali oqimni yaratishda uxlashingiz mumkin. Boost :: threads va QT kabi o'zaro faoliyat platformalar kutubxonalarida o'xshash funktsiyalarni ko'rmasangiz hayron bo'lmasligingiz kerak. Juda oddiy, pthreads bu funktsiyani qo'llab-quvvatlamaydi.
Win32-da sinxronizatsiya vositalari ikki xil: foydalanuvchi darajasida va yadro darajasida amalga oshiriladi. Birinchidan - bu ikkinchi