Tôi có một chương trình đa luồng in ra bảng điều khiển ở hàng trăm địa điểm. Thật không may, thay vìĐặt các chủ đề an toàn
Line 2
Line 1
Line 3
tôi nhận được
Line2Line1
Line3
Tôi cố gắng để làm cho puts
chủ đề an toàn.
Trong Python (mà tôi không nghĩ rằng có vấn đề này, nhưng giả sử nó đã làm), tôi muốn làm
old_print = print
print_mutex = threading.Lock()
def print(*args, **kwargs):
print_mutex.acquire()
try:
old_print(*args, **kwargs)
finally:
print_mutex.release()
Tôi đang cố gắng này trong Ruby,
old_puts = puts
puts_mutex = Mutex.new
def puts(*args)
puts_mutex.synchronize {
old_puts(*args)
}
Nhưng điều này không hoạt động: "phương pháp không xác định old_puts
"
Làm cách nào để tạo an toàn cho luồng (tức là không in một phần dòng)?
Mẹo: khi bạn thực hiện 'old_puts = puts', bạn đang làm ngầm' old_puts = puts() ' –