You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: FinalExam.md
+41-1Lines changed: 41 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -452,11 +452,51 @@ Aynı anda birden fazla iş parçacığı _(thread)_ ortak bir referansa erişme
452
452
453
453
**a)** Data vector yerine referans türlü bir diziye alınırsa sorun çözülür.
454
454
455
-
**b)** Data Arc (Atomic Reference Counting) smart pointer nesnesi içinde ele alınmalı ve döngüde açılan her bir thread örneği klonlanarak paylaşılmalıdır
455
+
**b)** Data Arc _(Atomic Reference Counting)_ smart pointer nesnesi içinde ele alınmalı ve döngüde açılan her bir thread örneği klonlanarak paylaşılmalıdır
456
456
457
457
**c)** data vektörü her thread::spawn çağrısında yeniden tanımlanmalıdır. Böylece her thread kendi data kopyasına sahip olur ve ownership sorunu yaşanmaz.
458
458
459
459
**d)** Closure bloğu içine data değişkeni move olmadan geçirilirse, tüm thread’ler ortak referansı kullanabilir.
460
460
461
461
## Soru 11
462
462
463
+
Rust programlama dili **thread-safe** bir ortam sağlamak için bazı kuralları devreye alsa da **Deadlock** veya **mutex poisoning** gibi durumlardan **kaçılamayabilir**. Kilit mekanizmalarının hatalı kullanımları **Deadlock** oluşmasına sebep olur. Diğer yandan bir kilit söz konusu iken bulunulan **thread** içerisinde panik oluşması da sorun yaratır ve bu durum **Thread Poisoning** olarak adlandırılır. Aşağıdaki örnek kod parçasında bu problemlerden hangisi meydana gelir?
464
+
465
+
```rust
466
+
usestd::sync::{Arc, Mutex};
467
+
usestd::thread;
468
+
fnmain() {
469
+
do_something();
470
+
println!("After the thread calling");
471
+
}
472
+
pubfndo_something() {
473
+
letnumber=Arc::new(Mutex::new(1));
474
+
letmuthandles=vec![];
475
+
476
+
foriin0..10 {
477
+
letnumber=Arc::clone(&number);
478
+
lethandle=thread::spawn(move|| {
479
+
println!("For counter is {}", i);
480
+
letmutnum=number.lock().unwrap();
481
+
letmutanother_num=number.lock().unwrap();
482
+
*num+=1;
483
+
});
484
+
handles.push(handle);
485
+
}
486
+
487
+
forhandleinhandles {
488
+
println!("Joining handle");
489
+
handle.join().unwrap();
490
+
}
491
+
492
+
println!("{:?}", number.lock().unwrap());
493
+
}
494
+
```
495
+
496
+
**a)** Thread Poisoning
497
+
498
+
**b)** Kod problemsiz çalışır
499
+
500
+
**c)** Deadlock
501
+
502
+
**d)** Handles değişkeni için derleme zamanında Value Moved Here hatası alınır
0 commit comments