alexa-tracking
Selamat Guest, Agan dapat mencoba tampilan baru KASKUS Masih Kangen Tampilan Sebelumnya
Kategori
Kategori
Home / FORUM / All / Tech / ... / Programmer Forum /
belajar pemrograman multithreading C/C++
1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/5b3f3117620881f7318b456f/belajar-pemrograman-multithreading-c-c

belajar pemrograman multithreading C/C++

Yuk gans kita belajar bareng seputar pemrograman multithreading.
Thread ini untuk belajar, bertanya, dan diskusi seputar pemrograman multithreading menggunakan C dan C++.
silakan para mastah memberikan jawaban kalau nanti ada pertanyaan. atau mengoreksi kalau ada yg salah.
Urutan Terlama
C++11 mempunyai library thread untuk pemrograman multithreading.

Contoh program (C++):

Code:
#include <iostream>
#include <thread>
using namespace std;

void fun(int i)
{
while(i--){
cout << "thread menggunakan function_pointer sebagai callable" << endl;
}
}

class MyCallable
{
public:
void operator()(int i)
{
while(i--)
{
cout << "thread menggunakan function_object sebagai callable" << endl;
}
}
};

int main(int argc,char** argv)
{
//thread dg callable berupa function_pointer
thread thread_1(fun,4);
//thread dg callable berupa function_object
thread thread_2(MyCallable(),4);
//membuat lambda_expression
auto lamb = [](int i)
{
while(i--)
{
cout << "thread menggunakan lambda_expression sebagai callable" << endl;
}
};

//thread dg lambda_expression sebagai callable
thread thread_3(lamb,4);

//tunggu sampai semua thread selesai
thread_1.join();
thread_2.join();
thread_3.join();
return 0;
}


bisa dibilang ketiga thread berjalan bersamaan. sehingga ketika program dieksekusi urutan outputnya bisa berubah-ubah.
code tsb hasil editan dari sini: https://www.geeksforgeeks.org/multit...eading-in-cpp/

cara kompilasi [jika memakai g++]
g++ namaprog.cpp -std=c++11 -pthread -o namaprog

cmiiw
Diubah oleh bocah156
Postinganmu berantakan, pusing saya bacanya.

Kalo kayak di bawah ini kan lebih enak dan rapi dengan indent lebih kerasa (4 karakter).

PHP Code:
// CPP program to demonstrate multithreading
// using three different callables.
#include <iostream>
#include <thread>
using namespace std;
 
// A dummy function
void foo(int Z)
{
    for (
int i 0Zi++) {
        
cout << "Thread using function"
               " pointer as callable "
;
    }
}
 
// A callable object
class thread_obj {
public:
    
void operator()(int x)
    {
        for (
int i 0xi++)
            
cout << "Thread using function"
                  " object as  callable "
;
    }
};
 
int main()
{
    
cout << "Threads 1 and 2 and 3 "
         "operating independently" 
<< endl;
 
    
// This thread is launched by using 
    // function pointer as callable
    
thread th1(foo3);
 
    
// This thread is launched by using
    // function object as callable
    
thread th2(thread_obj(), 3);
 
    
// Define a Lambda Expression
    
auto f = [](int x) {
        for (
int i 0xi++)
            
cout << "Thread using lambda"
             " expression as callable "
;
    };
 
    
// This thread is launched by using 
    // lamda expression as callable
    
thread th3(f3);
 
    
// Wait for the threads to finish
    // Wait for thread t1 to finish
    
th1.join();
 
    
// Wait for thread t2 to finish
    
th2.join();
 
    
// Wait for thread t3 to finish
    
th3.join();
 
    return 
0;

Quote:

OK gan makasih. nanti ane perbaiki emoticon-I Love Indonesia
gans kan ane nyoba code ini dari https://www.geeksforgeeks.org/multithreading-c-2/

PHP Code:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
 
// Let us create a global variable to change it in threads
int g 0;
 
// The function to be executed by all threads
void *myThreadFun(void *vargp)
{
    
// Store the value argument passed to this thread
    
int *myid = (int *)vargp;
 
    
// Let us create a static variable to observe its changes
    
static int s 0;
 
    
// Change static and global variables
    
++s; ++g;
 
    
// Print the argument, static and global variables
    
printf("Thread ID: %d, Static: %d, Global: %d ", *myid, ++s, ++g);
}
 
int main()
{
    
int i;
    
pthread_t tid;
 
    
// Let us create three threads
    
for (03i++)
        
pthread_create(&tidNULLmyThreadFun, (void *)&i);
 
    
pthread_exit(NULL);
    return 
0;



hasilnya
Thread ID nilai nya kadang 3 semua, kadang 1,2,3. padahal kan harusnya nilainya antara 0 sampai 2. kenapa ya gan?

kalau ane edit main() nya jadi ini
PHP Code:
int main()
{
    
int i;
    
pthread_t tid[3];

    
// Let us create three threads
    
for (03i++)
        
pthread_create(&tid[i], NULLmyThreadFun, (void *)&i);

    for(
i=0;i<3;++i){
        
pthread_join(tid[i],NULL);
    }
    
pthread_exit(NULL);
    return 
0;



id nya ngacak juga tapi range nya antara 0 sampai 2.
yg bener yg mana emoticon-Confused
ane coba bikin 3 thread. Masing" thread akan 'tidur' selama sekian detik sebelum kemudian ngeprint sesuatu. Dan lama waktu 'tidur' di set secara acak. berikut code C yg ane coba
Spoiler for code C:


cmiiw emoticon-Malu
dari array berikut ini (ada 100 elemen)

PHP Code:
int data[] = {99999932,3,3146,8329,3954909,238,347893948,22,3,111111,222222,242,53,46646,33333333333,4,4,500000000,1000199190,38577,12879,344,53353,28329,37832,327222245,2,35353,6,4,1131,828820,443,8493343,54,23,3442242,9999995,44444400,2,997777770,542323,3344443,999999,2,5353,838432,343,251515150,6222124,99999932,3,3146,8329,3954909,238,347893948,22,3,111111,222222,242,53,46646,33333333333,4,4,500000000,1000199190,38577,12879,344,53353,28329,37832,327222245,2,35353,6,4,1131,828820,443,8493343,54,23,3442242,9999995,44444400,2,997777770,542323,3344443,999999,2,5353,838432,343,251515150,6222124}; 


gmana cara menghitung jumlah elemen array data scr mutithreading? tujuannya spy proses perhitungan jadi lebih cepat emoticon-Bingung
Diubah oleh bocah156
Quote:

Setiap thread dikasih tau harus ngitung dari indeks berapa sampai berapa.
Nanti hasil masing2 thread dijumlah.
Source codenya saya ngak tau.
Ada kemugkinan bukan jadi tambah cepat malah jadi tambah lama, jadi sebaiknya kamu bandingin kecepatan dengan yang single thread.
Quote:

ya gan secara umum cara biasa lebih bagus emoticon-Jempol
terutama yg model ini

PHP Code:
for(auto a data)
{




tapi cara miltithreading selalu lebih bagus kalau di dalam loopnya ada sleep() dengan waktu tertentu. dengan adanya sleep() sptnya memaksa setiap jenis looping untuk menempuh waktu yg sama shg cara multithreading selalu lebih cepat. misalnya kalau cara biasa perlu10 detik maka cara paralel dengan 2 thread hanya 5 detik.

cmiiw
Quote:
Sebelumnya kamu ingin pakai multi thread supaya lebih cepat.
Sekarang kamu mau pakai sleep, sleep kan memperlama.
Kamu sebenarnya maunya apa sih?

Saran saya, berhenti main2 dengan multi thread.
Cari kasus yang serius, yang benar2 butuh multi thread dan benar2 lebih cepat dengan multi thread.

Di game FF15, pemain bisa jalan2 hampir tanpa ada tulisan loading waktu pindah tempat.
Pas saya periksa, ternyata game tsb terus menerus mengakses hard disk.
Dugaan saya, ada thread game biasa, ada thread yang me-load data sekitar pemain, jadi begitu pindah tempat, data sudah tersedia.
Quote:

sorry kalo membingungkan. ane sendiri gk ngerti kodingan itu maksudnya mau ngapain emoticon-Hammer2

Quote:

wah gitu yah? sayangnya ane gk ngerti game gan. coba dunk agan kasih kasus atau kasih link kalo ada spy ane dan yg lain bisa belajar juga emoticon-Big Grin emoticon-2 Jempol
Diubah oleh bocah156


×
GDP Network
Copyright © 2018, Kaskus Networks, PT Darta Media Indonesia.
Ikuti KASKUS di