28 Haziran 2016 Salı

managed_shared_memory Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/interprocess/managed_shared_memory.hpp>
Bu sınıf ile managed_mapped_file sınıfı arayüz olarak çok benziyorlar.

Bu sınıf Windows'ta backend olarak basic_managed_windows_shared_memory sınıfını kullanıyor. System V işletim sisteminde ise backend olarak basic_managed_xsi_shared_memory sınıfını kullanıyor. Her iki sınıfın ortak noktaları az olduğu için shmid değerini dışarı veremiyor.

constructor
Belleğin bölük bölük kullanılmasına izin verir. Yaratmak için şöyle yaparız.
//Create shared memory
managed_shared_memory segment (create_only,"MySharedMemory", 65536);
Varsa açar, yoksa yaratır. Şöyle yaparız
managed_shared_memory segment (open_or_create,"MySharedMemory", 65536);
Şöyle yaparız.
boost::interprocess::permissions perm; 
perm.set_unrestricted ()
managed_shared_memory segment(create_only_t(), "...", 42768, NULL, perm );
construct metodu
Yaratılan nesneye bir isim vermemiz gerekir. Şöyle yaparız.
segment.construct<MyType> ("Test") (0, 0.2);
Yaratılan nesneye bellek alanı da sağlamak gerekebilir.
segment.construct<my_string>("Test")(
            "Message to other process",
            segment.get_segment_manager());
find metodu
İsim ile daha önce yaratılan nesneye erişim sağlar.
std::pair<my_string * , size_t > p= mshm.find<my_string>("Test");
cout<< "got " << p.second << " strings " << endl;
cout<< "first string is->"<<p.first->c_str()<<endl;
find_or_construct metodu
Elimizde şöyle typdefler olsun
typedef int KeyType;

typedef boost::container::basic_string<..., ..., ... > MappedType;

typedef std::pair<KeyType, MappedType> ValueType;
typedef boost::interprocess::allocator<ValueType, ...> ShmAlloc;
typedef boost::unordered_map<KeyType, MappedType, ..., ..., ... > ShmHashMap;
Şöyle yaparız.
ShmHashMap *hash_map = segment.find_or_construct<ShmHashMap>
 (unique_instance)(segment.get_segment_manager());



Hiç yorum yok:

Yorum Gönder