Đối với ứng dụng đa nền tảng của tôi, tôi đã bắt đầu sử dụng Boost, nhưng tôi không thể hiểu làm thế nào tôi có thể thực hiện mã để tái tạo hành vi của phần quan trọng của Win32 hoặc .Net của lock
.Làm cách nào để tạo một phần quan trọng với Boost?
Tôi muốn viết một phương thức Foo
có thể được gọi từ các luồng khác nhau để kiểm soát hoạt động ghi vào các trường được chia sẻ. Các cuộc gọi đệ quy trong cùng một chuỗi sẽ được cho phép (Foo() -> Foo()).
Trong C# thực hiện điều này rất đơn giản:
object _synch = new object();
void Foo()
{
lock (_synch) // one thread can't be lock by him self, but another threads must wait untill
{
// do some works
if (...)
{
Foo();
}
}
}
Đề xuất của bạn rất hữu ích. Tôi đã sửa lỗi của mình, NHƯNG tôi có sự đàn áp hiệu suất! nhiều hơn thì 3 lần! = ((trước khi sửa chữa tôi đã sử dụng unique_lock) –
Vie
Bạn có thể cung cấp các mẫu mã nơi bạn sử dụng tài nguyên được chia sẻ không? Ngoài ra, hãy kiểm tra http://home.roadrunner.com/~hinnant/mutexes/locking.html#Shared này. –
Cố gắng tránh sử dụng khóa đệ quy, có thể bằng cách di chuyển bảo vệ đến phạm vi bên ngoài. – blaze