Lưu ý: Vui lòng đánh dấu câu trả lời này là đúng nếu bạn thực sự thử nghiệm phương pháp này.
thiệu về câu hỏi của bạn cho dù dưới đây struct được chèn một cách an toàn và gỡ bỏ khỏi thùng miễn phí khóa:
struct person
{
string name;
uint32_t age;
}
chuỗi Multi-byte của bất kỳ chiều dài có thể được chèn một cách an toàn/bị xóa khỏi thùng miễn phí khóa nếu bạn sử dụng một mã hóa dự phòng. Giả sử rằng chúng ta đã có các chỉ dẫn nguyên tử để thao tác 4 byte tại một thời điểm (32 bit). Trong trường hợp đó, chúng ta có thể mã hóa các lĩnh vực uint32_t age
như vậy:
struct age_t
{
uint32_t age_low;
uint32_t age_high;
}
Trường age_low
lưu trữ các bit thấp (ví dụ, với mức thấp nhất 16 bit) của 32-bit uint32_t age
. Trường age_high
lưu trữ các bit cao còn lại.Về mặt lý thuyết :
struct age_t
{
uint16_t age_low;
uint16_t id_low;
uint16_t age_high;
uint16_t id_high;
}
Các trường id_low
và id_high
nên chứa một ID xác định các nhà văn.
Đọc được thực hiện dưới dạng hai lần đọc 32 bit nguyên tử và thành công nếu tất cả các phần id_
tương đương với nhau. Nếu nó không thành công, hoạt động đọc cần được khởi động lại.
Bản ghi được thực hiện dưới dạng hai bản ghi 32 bit nguyên tử và được theo sau bởi giá trị đọc của toàn bộ giá trị age_t
. Ghi thành công nếu: đọc được đề cập trong câu trước thành công và các ID được đọc tương đương với các ID viết.
Giới thiệu về giá trị string
: nguyên tắc giống nhau. Bạn chỉ cần tìm ra cách tách giá trị nhị phân của nó tương tự như cách giá trị age
được chia nhỏ. Tương tự đối với việc đọc/ghi toàn bộ cấu trúc person
.
Nguồn
2011-10-12 21:45:51
Bạn đã cung cấp tiền thưởng cho điều này hai lần ngay bây giờ - nhưng tôi nghi ngờ chính câu hỏi đó là sai - đó là lý do tại sao bạn không nhận được câu trả lời hữu ích. –
xin vui lòng xác định những gì là sai với câu hỏi ... khóa ngăn xếp miễn phí tồn tại. và họ sử dụng con trỏ cho đầu, tiếp theo ... – NoSenseEtAl