I wrote a simple sample program that produces the following output:

% g++ -std=c++14 -losgViewer -pthread a.cpp && time ./a.out
Thread 5 done
Thread 9 done
Thread 4 done
Thread 0 done
Thread 6 done
Thread 15 done
Thread 12 done
Thread 13 done
Thread 11 done
Thread 7 done
Thread 8 done
Thread 1 done
Thread 3 done
Thread 10 done
Thread 14 done
Thread 2 done
./a.out  161.06s user 0.02s system 392% cpu 41.036 total

% g++ -std=c++14 -losgViewer -pthread -DSINGLETHREADED a.cpp && time ./a.out
Thread 6 done
Thread 13 done
Thread 9 done
Thread 8 done
Thread 15 done
Thread 10 done
Thread 11 done
Thread 14 done
Thread 5 done
Thread 4 done
Thread 1 done
Thread 3 done
Thread 7 done
Thread 12 done
Thread 2 done
Thread 0 done
./a.out  121.23s user 0.02s system 99% cpu 2:01.92 total

The program looks like this:

--------
#include <future>
#include <iostream>
#include <vector>

#include <osgViewer/Viewer>
#include <osgViewer/ViewerBase>

int main() {
        constexpr int numThreads = 16;
        osgViewer::Viewer viewer;
#ifdef SINGLETHREADED
        
viewer.setThreadingModel(osgViewer::ViewerBase::ThreadingModel::SingleThreaded);
#endif
        viewer.realize();

        const auto compute = [] (const int i) {
                for(volatile int n = 0; n != 1'000'000'000; ++n) {
                        ++n;
                        --n;
                }
                std::cout << "Thread " << i << " done\n";
        };

        std::vector<std::future<void>> futures;
        for(int i = 0; i != numThreads; ++i) {
                futures.push_back(std::async(std::launch::async, compute, i));
        }
        for(auto & future: futures) {
                future.wait();
        }

        return 0;
}
--------

Christoph

On 09/25/2016 01:42 AM, Fabian Wiesel wrote:
  int main(int argc, char **argv) {
    std::vector<int> myvector(1024);
    osgViewer::Viewer viewer;
    viewer.setSceneData( node );
    viewer.setThreadingModel(SingleThreaded);
    viewer.realize(); // calling ViewerBase::setUpThreading() -> 
OpenThreads::SetProcessorAffinityOfCurrentThread(0); -> pthread_setaffinity_np(...)

    // Create Threads
    for (int i = 0; i < 100; ++i) pthread_create(...)

    viewer.run()
    pthread_join(...);
  }
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to