January 02, 2017

Selamün Aleyküm;

Ben C++ 11 ile std::async kullanarak basit bir kod yazdığımda bir hata vererek benden -lpthread eklemeniz istedi. Ekleyince de çalıştı. Acaba std::async arkaplanda thread mi kullanıyor?

#include <iostream>
#include <future>
using namespace std;

int main()
{
 auto res0 = async(launch::async, [] { for (int i = 0; i < 10; i++) cout << i << endl; });
 auto res1 = async(launch::async, [] { for (char i = 'a'; i < 'g'; i++) cout << i << endl; });

 res0.get();
 res1.get();
}

Ayrıca bu kod ilk önce 0'dan 9'a kadar sayıları basıyor, sonra da a'dan f'ye kadar harf basıyor. Neden eşzamansız çalışmıyor? Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 02, 2017

C++, thread kullanılmasını şart koşmuyormuş ama bütün modern ortamlarda öyle olduğunu varsayabiliriz.

cout gibi paylaşımlı nesnelerin hangi anda hangi std::anync thread tarafından kullanıldığını veya bu nesnelerin kilitlenip kilitlenmediklerini bilmiyorum. Eş zamanlı işlediklerini görebilmen için birisinin işi bitmeden ötekine geçilmesi gerekir. Oysa her ikisi de işlerini çok kısa zamanda bitiriyorlar. Ne olup bittiğini anlayabilmek için çıkışa yazı yazdırılan ifadelerden önce rasgele sürelerle bekleme yerleştirmeni öneririm. Belki o zaman çıktıda karışık olarak belirirler.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]