Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > thread и atomic, как добить?


Автор: asmdzen 3.7.2011, 10:14
нашел код:
Код

#include <iostream>
#include <thread>
#include <atomic>
#include <assert.h>

using namespace std;

class TestableMutex {
public:
     void lock()    {   m.lock();  id = this_thread::get_id(); }
     void unlock()  {   id = (thread::id)0;  m.unlock(); }
     bool try_lock(){   bool b = m.try_lock();
                        if( b ) id = this_thread::get_id();
                        return b; }
     bool is_held() {   return id == this_thread::get_id(); }
private:
     mutex m;
     atomic<thread::id> id;
     // for recursive mutexes, add a count (multiple lock by a thread)
};
     
class myClass{
private:
   int myInt_;
   TestableMutex mut_;

public:
   void lock()     {  mut_.lock(); } 
   bool try_lock() {  return mut_.try_lock(); } 
   void unlock()   {  mut_.unlock(); } 
   int& myInt(){ assert(mut_.is_held()); return myInt_; }
} myObj;

int main()
{
   lock_guard<myClass> tmpLock(myObj);
   cout << myObj.myInt();
   return 0;
}

http://drdobbs.com/go-parallel/article/224701827?pgno=3

не могу довести его до ума чтоб линковался и можно было его использовать. Помогите разобраться.
компилер MinGW 4.6.0 (сборка что стоит у boostcoder'а в подписи)

http://liveworkspace.org/code/72dd64b888d7bca2aed04f5a32aaddea

Автор: azesmcar 3.7.2011, 10:59
атомарные операции не портированы под windows (т.е. minGW).

Автор: asmdzen 3.7.2011, 14:27
azesmcar, а boost? в нем я atomic не нашел но может он где то закопан, т.е. можно использовать что-то другое в этих целях? 

Автор: azesmcar 3.7.2011, 14:28
Цитата(asmdzen @  3.7.2011,  14:27 Найти цитируемый пост)
azesmcar, а boost? в нем я atomic не нашел но может он где то закопан, т.е. можно использовать что-то другое в этих целях?  

Нет его там. Портируемую реализацию можно взять в Intel TBB, еще есть в Qt. Для VS2005-2010 у меня есть реализация.

Автор: asmdzen 3.7.2011, 14:38
Цитата(azesmcar @  3.7.2011,  14:28 Найти цитируемый пост)
Для VS2005-2010 у меня есть реализация.

поделитесь? пожалуйста )
нужно под MinGW но если нету то можно проект и в студию перенести. (TBB тоже посмотрю)
(а с этим могут быть какие-то проблемы? http://www.chaoticmind.net/~hcb/projects/boost.atomic/doc/index.html)

Автор: azesmcar 3.7.2011, 20:31
Цитата(asmdzen @  3.7.2011,  14:38 Найти цитируемый пост)
поделитесь? пожалуйста )

http://www.data-race.com/projects/. Но там на стадии тестирования, если для какого нибудь реального проекта, то я думаю стоит посмотреть на более обкатанные варианты.

Цитата(asmdzen @  3.7.2011,  14:38 Найти цитируемый пост)
TBB тоже посмотрю

атомарные типы в TBB имеют схожий интерфейс с атомарными типами в C++0x. Но библиотека насколько я помню не бесплатна для разработки коммерческих проектов.
Цитата(asmdzen @  3.7.2011,  14:38 Найти цитируемый пост)
(а с этим могут быть какие-то проблемы? http://www.chaoticmind.net/~hcb/projects/b...doc/index.html) 

а что это? у меня даже не открывает. Но вообще могут конечно smile везде могут быть какие-то проблемы, ничто не идеально.

Автор: asmdzen 3.7.2011, 20:54
Цитата(azesmcar @  3.7.2011,  20:31 Найти цитируемый пост)

Пожалуйста
 спасибо - прикручу.


Цитата(azesmcar @  3.7.2011,  20:31 Найти цитируемый пост)
у меня даже не открывает

форум склеил в конце скобку )
вот:
http://www.chaoticmind.net/~hcb/projects/boost.atomic/doc/index.html

Автор: azesmcar 3.7.2011, 21:02
Цитата(asmdzen @  3.7.2011,  20:54 Найти цитируемый пост)
форум склеил в конце скобку )
вот:
http://www.chaoticmind.net/~hcb/projects/b.../doc/index.html 

Автор мне не знаком и библиотека не входит в boost, но это в принципе не мешает ей работать smile

Автор: asmdzen 3.7.2011, 23:06
azesmcar, спасибо, буду разбираться.

Автор: boostcoder 4.7.2011, 17:21
Цитата(azesmcar @  3.7.2011,  10:59 Найти цитируемый пост)
атомарные операции не портированы под windows (т.е. minGW).

ошибаетесь.
их портировать и не нужно, ибо компилятор сам генерит инлайн вставки из следующих инструкций: http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Atomic-Builtins.html

asmdzen, вот моя первая сборка mingw на базе gcc-4.7.0: http://try-catch.ru/library/compilers/i686-pc-mingw32-bin-4.7.0-snapshop-20110617-rev-0.tar.lzma
проверил на сколько смог. все работает: mutex, atomic, thread, lock, timed_lock, condition_variable, e t.c...

надеюсь на днях соберу первую стабильную версию mingw на базе gcc-4.6.1. скрестите пальцы. ибо сборка gcc для вендус это процесс не для слабонервных smile 

Автор: asmdzen 4.7.2011, 21:20
boostcoder, спасибо за вашу работу, удобно писать код не замарачиваясь поиском библиотек/хидеров.

Автор: boostcoder 4.7.2011, 21:25
Цитата(asmdzen @  4.7.2011,  21:20 Найти цитируемый пост)
библиотек/хидеров

но учти, по приведенной мною ссылке, только mingw. никаких дополнительных библиотек там нет. все потому, что это во первых - сборка нестабильной версии. во вторых - это первая сборка вообще во всем инете, в которой из коробки работает весь threading-модуль из с++0x + LTO + OpenMP + Graphite smile 
другое дело тот mingw что в подписи.

Автор: asmdzen 4.7.2011, 21:59
Цитата(boostcoder @  4.7.2011,  21:25 Найти цитируемый пост)
другое дело тот mingw что в подписи.

то есть совместить не получится?

Автор: boostcoder 5.7.2011, 08:28
Цитата(asmdzen @  4.7.2011,  21:59 Найти цитируемый пост)
совместить не получится?

должно получится. попробую на досуге.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)