Quản lý C++ có tương đương với C# 'lock() và SyncLock của VB không? Nếu vậy, làm cách nào để sử dụng?Khóa của C#() trong Managed C++
18
A
Trả lời
20
Tương đương với khóa/SyncLock sẽ sử dụng lớp Monitor.
Trong .NET 1-3.5sp, khóa (obj) thực hiện:
Monitor.Enter(obj);
try
{
// Do work
}
finally
{
Monitor.Exit(obj);
}
Tính NET 4, nó sẽ là:
bool taken = false;
try
{
Monitor.Enter(obj, ref taken);
// Do work
}
finally
{
if (taken)
{
Monitor.Exit(obj);
}
}
Bạn có thể dịch này để C++ bằng cách thực hiện :
System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
// Do work
}
finally
{
Monitor::Exit(obj);
}
-2
2
Không tương đương với từ khóa lock
trong C++. Bạn có thể làm điều này thay vì:
Monitor::Enter(instanceToLock);
try
{
// Only one thread could execute this code at a time
}
finally
{
Monitor::Exit(instanceToLock);
}
55
C++/CLI không có một lớp 'khóa' - tất cả các bạn cần làm là khai báo biến khóa sử dụng ngữ nghĩa dựa trên stack và nó sẽ an toàn thoát khỏi màn hình khi destructor của nó được gọi , ví dụ:
#include <msclr\lock.h>
{
msclr::lock l(m_lock);
// Do work
} //destructor of lock is called (exits monitor).
Khai báo 'm_lock' tùy thuộc vào thành viên bạn muốn bảo vệ. Để bảo vệ các thành viên dụ sử dụng này:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock -
// protect instance members.
để bảo vệ các thành viên tĩnh sử dụng này:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
// protect static members.
Các vấn đề liên quan
- 1. Cách ánh xạ Tín hiệu Qt đến Sự kiện trong Managed C++ (C++/CLI)
- 2. Từ khóa mặc định của C# tương đương trong C++?
- 3. Nguyên văn Nguyên văn trong Managed C++? (như C# 's @ "blah")
- 4. Nested khóa trong C#
- 5. Tôi nhận được LNK2028 khi cố gắng bọc lớp gốc C++ sử dụng managed C++
- 6. Làm cách nào để chuyển một hàm C# delegate sang một Managed C++ .Dll?
- 7. Tạo một assembly COM có thể nhìn thấy từ managed C++ (C++/CLI)
- 8. Sự khác nhau giữa Managed C++ và C++/CLI là gì?
- 9. C++/CLI tương đương với từ khóa 'readonly' của C#
- 10. Từ khóa tĩnh trong C#
- 11. C: Hành vi của từ khóa `const`
- 12. Từ khóa 'out' trong C++
- 13. Khóa phương pháp trong C#
- 14. Làm thế nào để tôi gõ typeof (int) trong Managed C++?
- 15. Mục đích của từ khóa 'này' trong C#
- 16. Tuyên bố Khóa C#
- 17. Mục tiêu của từ khóa "tự động" của C
- 18. Tự động khóa/mở khóa bằng cách sử dụng phạm vi trong C++ (từ nền C#)
- 19. Sử dụng từ khóa mới trong C#
- 20. Từ khóa chưa được ký trong C++
- 21. C# để khóa hoặc không khóa
- 22. Có thể thực hiện khóa bị khóa trong C# không?
- 23. Recursive/khóa lồng nhau trong C# với tuyên bố khóa
- 24. Tên khóa đẹp trong C# (Biểu mẫu)
- 25. Chụp khóa cửa sổ trong C# (wpf)
- 26. Tạo khóa RSA riêng trong C#
- 27. Thay thế cho khóa C trong Emacs?
- 28. Tạo khóa HMACSHA256 mạnh trong C#
- 29. Đám mây từ khóa trong C#
- 30. Sử dụng từ khóa ảo trong C++
Tôi muốn xem xét http://stackoverflow.com/questions/1369459/cs-lock-in-managed -c/7527111 # 7527111 vượt trội ở chỗ nó là cả hai trong bản chất C++ (RAII) cũng như gần gũi hơn với từ khóa khóa C# – sehe