PARALEL DASTURLASH ParadigmalarI.
O'zaro aloqador teng
Bunday paradigmali ilovada ishlarning taqsimlanishi oldindan belgilanadi yoki ish vaqtida dinamik ravishda aniqlanadi. Ishni dinamik ravishda taqsimlashning eng keng tarqalgan usullaridan biri bu vazifalar portfelidir. Vazifalar portfeli odatda bir vaqtning o'zida faqat bitta jarayonga kira oladigan umumiy o'zgaruvchi yordamida amalga oshiriladi.
PARALEL DASTURLASH ParadigmalarI.
O'zaro aloqador teng
Hisoblash vazifasi cheklangan sonli vazifalarga bo'linadi. Qoida tariqasida, har bir qo'shimcha vazifa har xil ma'lumotlar bo'yicha bir xil turdagi harakatlarni bajarishi kerak. Vazifalar raqamlangan va har bir raqamga tegishli ma'lumotlar to'plamining vazifa raqamini aniq ko'rsatadigan funksiya tayinlangan. Har bir oqim birinchi navbatda vazifalar portfeliga kiradi va joriy vazifa raqamini topadi, so'ngra uni qiymatini o’zgartiradi, so'ngra tegishli ma'lumotlarni oladi va vazifani bajaradi, so'ngra keyingi vazifa raqamini bilish uchun vazifalar portfeliga havola qilinadi.
Misol
Oddiy parallel dastur:
#include
#include
using namespace std;
void anyFunc() {
cout<<"thread function";
}
int main() {
thread func_thread(anyFunc);
return 0;
}
2-Misol
#include
#include
using namespace std;
void anyFunc() {
cout << "thread function";
}
int main() {
thread func_thread(anyFunc);
func_thread.join();
return 0;
}
3-Misol
#include
#include
using namespace std;
void anyFunc() {
cout << "thread function";
}
int main() {
thread func_thread(anyFunc);
if (func_thread.joinable())
func_thread.join();
// func_thread.detach(); / oqimni majburan to’xtatish
return 0;
}
4-Misol
#include
#include
using namespace std;
void printStr(char * str) {
cout << str << '\n';
}
void printArray(int a[],const int len) {
for (int i = 0; i < len; i++) {
cout << a[i] << ' '; }
}
int main() {
char* str = "thread function with parametrs"; const int len = 8;
int arr[len] = {12, 45, -34, 57, 678, 89, 0, 1};
thread func_thread(printStr, str);
thread func_thread2(printArray, arr, len);
if (func_thread.joinable()) func_thread.join();
if (func_thread2.joinable()) func_thread2.join();
return 0; }
Do'stlaringiz bilan baham: |