Giriş
Şu satırı dahil ederiz.
Yapı şuna benzer.
pthread_mutexattr_init metodu
Metodun imzası şöyle.
Örnek 1 - static global mutex
Şöyle yaparız.
Elimizde şöyle bir sınıf olsun.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include<pthread.h>
pthread_mutex_t YapısıYapı şuna benzer.
/* User visible part of a mutex. */
struct __pthread_mutex
{
__pthread_spinlock_t __held;
__pthread_spinlock_t __lock;
char *cthreadscompat1;
struct __pthread *__queue;
struct __pthread_mutexattr *attr;
void *data;
void *owner;
unsigned locks;
};
Dolayısıyla ilklendirmesinin kolay olmadığı anlaşılabilir.pthread_mutexattr_init metodu
Mutex'e verilecek özellikleri varsayılan değerler ile ilklendirmek için şöyle yaparız.
Mutex'e verilecek özellikleri atamak için şöyle yaparız.
Şöyle yaparız.
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared metoduMutex'e verilecek özellikleri atamak için şöyle yaparız.
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_destroy metoduŞöyle yaparız.
pthread_mutex_destroy (&mutex);
pthread_mutex_init metodu
Açıklaması şöyleMutex'i kullanmaya başlamadan önce pthread_mutex_init() metodu ile ilklendirmek gerekiyor.Attempting to initialise an already initialised mutex results in undefined behaviour.
Metodun imzası şöyle.
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
Şöyle kullanırız.pthread_mutex_t mutex;
pthread_mutex_init (&mutex, NULL);
Eğer ikinci parametreye NULL geçersek, POSIX kütüphanesinin gerçekleştirmesine bağımlı olan bir default davranış elde ederiz. Default davranış ta non-recursive mutex'tir. Ancak bu davranış platforma göre değişebiliyor denmiş fakat ben bunu gözlemleyemedim . O yüzden emin olmak adına NULL kullanmamak daha iyi.
PTHREAD_MUTEX_INITIALIZER
Açıklaması şöyleEğer mutex static veya global ise kullanırız....In cases where default mutex attributes are appropriate, the macro PTHREAD_MUTEX_INITIALIZER can be used to initialize mutexes. The effect shall be equivalent to dynamic initialization by a call to pthread_mutex_init() with parameter attr specified as NULL. ...
Örnek 1 - static global mutex
Şöyle yaparız.
static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
Örnek 2 - static member mutexElimizde şöyle bir sınıf olsun.
class Mutex{
public:
static pthread_mutex_t mutex;
public:
Mutex();
virtual ~Mutex();
};
Şöyle yaparız.pthread_mutex_t Mutex::mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock metoduŞöyle yaparız.
pthread_mutex_lock (&mutex);
pthread_mutex_trylock metodu
İmzası şöyle
pthread_mutex_unlock yazısına taşıdım.İmzası şöyle
pthread_mutex_unlock metoduint pthread_mutex_trylock (pthread_mutex_t *mutex);
Hiç yorum yok:
Yorum Gönder