Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 17:56   #1
Egyptorium
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 17
По умолчанию Как узнать, захвечен mutex или нет (linux, C++)

Добрый день, пишу функцию, аналгичную pthread_mutex_trylock (pthread_mutex_t mutex).
Задумка такая: посмотреть состояние переменной pthread_mutex_t mutex
и если mutex захвачен, то функция закрывается, а если свободен, то вызывать функцию pthread_mutex_lock.
Проблема в том, что у меня никак не получается узнать свободен ли mutex. Для этого я пытаюсь вывести на экран, присвоить переменную lock, но она не датся.
Буду рад любым подсказкам, ссылкам на источники. Зараннее спасибо!
P.S. Стандартная функция всем устраивает, но нужно написать свою, такое задание.
Код:
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

using namespace std;

pthread_mutex_t my_sync;

int lab_pthread_mutex_trylock(pthread_mutex_t mutex) // это должно стать моей функцией
{
int ret;
string loshadka;
loshadka  mutex;
cout << mutex;
return 0;
}

int lab_pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex, unsigned int timetowait) // это должно стать еще одной функцией
{

}


void * streamA (void *p) //Поток А
{
    for (;;)
    {
        cout<< "Поток A хочет звахватить MUTEX"<<endl;
        cout <<  pthread_mutex_lock (&my_sync);
        cout<< "Поток A зватывает MUTEX"<<endl;
        sleep (1);

        cout<< "Поток A не отдает MUTEX"<<endl;
      //  pthread_mutex_unlock (&my_sync);
    }
}

void * streamB (void *p) // Поток B
{
    for (;;)
    {
        sleep(0.5);

        cout<< "Поток B хочет зватыватить MUTEX"<<endl;
        cout <<  lab_pthread_mutex_trylock (&my_sync);
        cout<< "Поток B зватывает MUTEX"<<endl;
        sleep (2);

        //cout<< "Поток B освобождает MUTEX"<<endl;
        //pthread_mutex_unlock (&my_sync);
    }
}

int main()
{
    int anykey;
    pthread_t kidA,kidB;
    pthread_attr_t attr;
    pthread_attr_init (&attr);
    pthread_mutex_init (&my_sync, NULL);
    pthread_create (&kidA, &attr, streamA, NULL);
    pthread_create (&kidB, &attr, streamB, NULL);
    cin >> anykey;
    return 0;
}

Последний раз редактировалось Egyptorium; 16.01.2013 в 01:42.
Egyptorium вне форума Ответить с цитированием
Старый 16.01.2013, 14:55   #2
Egyptorium
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 17
По умолчанию

Разобрался сам. Тему можно удалить.
Egyptorium вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать, как пересекаются точки в декартовой системе координат или нет? gylayko Паскаль, Turbo Pascal, PascalABC.NET 4 29.09.2011 09:34
как узнать пересекаются 2 окружности или нет fate Общие вопросы Delphi 2 17.06.2011 15:27
как узнать занят порт или нет DeDoK Работа с сетью в Delphi 3 12.09.2010 21:51
Как узнать программа запущена или нет? ilSMoKEli Общие вопросы Delphi 5 02.05.2010 23:01
Как узнать открыл пользователь окно или нет? KaimNotark Общие вопросы Delphi 5 09.02.2010 09:38