+1 امتیاز
قبل در کامپیوتر و اینترنت توسط (778 امتیاز)
ویرایش شده قبل توسط
اصطلاح thread safe بودن در برنامه نویسی چند نخی یعنی چی؟

3 پاسخ

+3 امتیاز
قبل توسط (302 امتیاز)
ویرایش شده قبل توسط
پیاده سازی ای که به ما اطمینان بده هیچ گونه race condition ای هنگام دسترسی همزمان چند thread به یک ساختار داده صورت نمیگیره رو پیاده سازیِ thread safe میگیم.

race condition : شرایطی که چند thread توانایی دسترسی همزمان به یک داده و تغییر آن را داشته باشند.

 

این اطمینان رو از طریق روش های زیر کسب کرد:

* قرار دادن lock روی داده های مشترک (باید از بوجود امدن deadlock جلوگیری کرد و به منظور کارایی بیشتر تا حد امکان از starvation جلوگیری کرد)

* استفاده از داده های atomic به عنوان متغیرها مشترک (کارایی بیشتر نسبت به بقیه راه ها)

* استفاده از داده های volatile

* استفاده از بلاک ها یا متدهای synchronize
+2 امتیاز
قبل توسط (1.1هزار امتیاز)

وقتی یک ساختار داده را بتوان بدون هیچ مشکلی بصورت همزمان بین چند thread به اشتراک گذاشت بدون اینکه در فرآیند کاری هیچ کدام از thread ها مشکلی ایجاد شود، در اصطلاح به آن ساختار داده thread safe می گویند. استراتژی ها و الگوریتم های مختلفی برای thread safe کردن یک ساختار داده وجود دارد که معمولا باعث کاهش سرعت آن ساختار داده می شود. 

قبل توسط (302 امتیاز)
race condition باعث اختلال در کار thread نمیشه (طبق تعریفش). ممکنه یه برنامه multi thread سال ها کار کنه و سال ها یه مقدار اشتباه رو به عنوان داده مشترک استفاده کنه. منظورم اینه که thread ها بدون هیچ اختلالی میتونن کار کنن اما اون پیاده سازی، پیاده سازیِ thread safe نیست.
قبل توسط (1.1هزار امتیاز)
+1
منظور من از اختلال از کار افتادن نبود. منظورم هرگونه اتفاقی که منجر به نتیجه غلط بشه بود.
+2 امتیاز
قبل توسط (80 امتیاز)
ویرایش شده قبل توسط

مفهوم Thread-safe

  • برخی از کلاس ها، thread-safe هستند: ایمن در همروندی
  •  استفاده از اشیاء این کلاس ها به صورت همروند، ایمن است.
  •  از اشیاء این کلاس ها میتوانیم به طور مشترک در چند نخ استفاده کنیم.
  • برای استفاده از این اشیاء در چند نخ همزمان، نیازی به قفل یا synchronized نیست.
  • تمهیدات لازم در داخل همان کلاس پیاده سازی شده است.
  • اشیاء تغییرناپذیر ( immutable ) همواره thread-safe هستند.
  • ویژگیهای اشیاء تغییرناپذیر بعد از ساخت این اشیاء قابل تغییر نیست،مثلاً setter ندارند. مانند: String و Integer در نتیجه امکان تغییر وضعیت آن ها وجود ندارد: استفاده از آن ها در چند نخ همزمان ایمن است

کلاس های ایمن یا Thread-safe :

  1. Vector
  2. ConcurrentHashMap
  3.  StringBuffer (متدهای تغییردهنده در StringBuffer به صورت synchronized هستند.)
  • راهی ساده برای این که یک کلاس thread-safe شود،استفاده از Concurrent Collections از نسخه  ( JDK 1.5 ) بسته java.util.concurrent می باشد. مثل:
  1. ConcurrentHashMap
  2. ArrayBlockingQueue
  3. CopyOnWriteArrayList

سوالات مشابه

+2 امتیاز
2 پاسخ 2.8هزار بازدید
0 امتیاز
1 پاسخ 2.6هزار بازدید
0 امتیاز
1 پاسخ 462 بازدید
0 امتیاز
0 پاسخ 293 بازدید
0 امتیاز
1 پاسخ 325 بازدید
0 امتیاز
0 پاسخ 315 بازدید
...