Thread Cancellation Terjemahan Ke 2 + Kesimpulan
Thread Cancellation Terjemahan Ke 2 + Kesimpulan
alkan, semua hal ini adalah membuang pengecualian tipe thread_canceled. Jadi t
hread dibatalkan dapat membatalkan nya membatalkan hanya dengan menangk
ap (dan tidak kembali
melempar) thread_canceled. Satu thread dapat
meminta thread lain melempar pengecualian thread_canceled dengan sintaks ini
:
std::thread t(f);
t.cancel();
itself
Catatan bahwa thread utama tidak dapat dibatalkan (oleh thread lain) kar
ena pembatalan oleh thread lain hanya dapat dilakukan
melalui std :: thread dan tidak ada cara untuk membuat std :: thread yang meng
acu ke thread adalah utama daftar poin pembatalan dianjurkan.
void std::this_thread::cancellation_point()
void std::this_thread::sleep(std::nanoseconds rel_time)
void std::thread::join()
void std::thread::operator()()
void std::condition<Lock>::wait(Lock&)
template<class Predicate>void std::condition<Lock>::wait(Lock&,
Predicate)
bool std::condition<Lock>::timed_wait(Lock&, std::nanoseconds)
template<classPredicate>void
std::condition<Lock>::timed_wait(Lock&,std::nanoseconds,
Predicate)
SomeClass::~SomeClass()
{ try
{ t_.join();
}
catch (...)
{
}
std::this_thread::disable_cancellation _;
// cancellation disabled here
foo();
// cancellation still disabled here }
bar
Maka tidak mungkin untuk kode dalam fungsi foo mengaktifkan pembatala
n (bahkan jika itu mencoba untuk seperti contoh ini). Untuk mengaktifkan pemba
talan yang disebut fungsi, bar tidak benarbenar memungkinkan pembatalan kecuali dideferensikan disable_cancellation
objek fungsi.
Desain ini telah dibentuk untuk memberikan fleksibilitas untuk menonaktif
kan dan memungkinkan pembatalan, namun
mencegah disengaja memungkinkan saat memanggil kode yang tidak diketahui,
dan untuk mencegah sengaja tidak mengaktifkan
kembali ketika pengecualian merambat melalui tumpukan bingkai.
KESIMPULAN
Jadi kesimpulan yang terdapat dalam paper dengan judul Thread
Launching for C++0X, kita dapat mengetahui dalam C++ bagaimana cara cara
yang dapat digunakan untuk memakai proses thread cancellation. Dan juga kita
dapat mengetahui bahwa thread utama tidak dapat dibatalkan (oleh thread
lainnya ) karena pembatalan oleh thread lain hanya dapat melalui std :: thread
dan tidak ada cara untuk membuat std :: thread yang mengacu ke thread
adalah utama daftar poin pembatalan yang dianjurkan yaitu :
void std::this_thread::cancellation_point()
void std::this_thread::sleep(std::nanoseconds rel_time)
void std::thread::join()
void std::thread::operator()()
void std::condition<Lock>::wait(Lock&)
template<class Predicate>void std::condition<Lock>::wait(Lock&,
Predicate)
bool std::condition<Lock>::timed_wait(Lock&, std::nanoseconds)
template<classPredicate>void
std::condition<Lock>::timed_wait(Lock&,std::nanoseconds,
Predicate)