Thread (8 messages) 8 messages, 4 authors, 2017-04-03

Re: How to write RT applications ?

From: Brian Wrenn <hidden>
Date: 2017-03-22 13:10:04

Hi Julia (and anyone else following),

I was looking at that exact page yesterday.  W.r.t. the sample code on
the wiki, I'd need to address five function calls.  Here's what I
found.

// ::boost::thread provides it's own ::boost::thread::attributes, but
it's not as
// comprehensive, i.e. only includes stack size.  ::std::thread at
this point aims to
// be cross platform and hence doesn't.
// Finding: ::boost::thread==>kinda, ::std::thread==>no
pthread_attr_init(&attr);

// Can apply to ::boost::thread via ::boost::thread::attributes, but
not ::std::thread.
// Finding: same as previous
pthread_attr_setstack(&attr, stack_buf, PTHREAD_STACK_MIN);

// Can only apply at the attribute level prior to creating, at least
with the pthread
// API I have for arm64, a therefore not via native_handle().
// Finding: ::boost::thread==>no, ::std::thread==>no
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);

// Can apply via native_handle().
// Finding: ::boost::thread==>yes, ::std::thread==>yes
pthread_attr_setschedparam(&attr, &param);

// Can only apply at the attribute level and not via native_handle().
// Finding: ::boost::thread==>no, ::std::thread==>no
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);

If there's some way to use pthread_self() to address the calls that
can't work on native_handle(), I haven't found it yet.

Alternatively, if I were to use sched_setscheduler() instead of
pthread attributes, that eliminates three of the above, which means
one could conceivably use ::boost::thread and
::boost::thread::attributes to set the stacksize, but to cross compile
the boost libraries, as I'd need to link against boost_system.so/a, it
may not be worth the effort over just using pthreads.


On Tue, Mar 21, 2017 at 4:17 PM, Julia Cartwright [off-list ref] wrote:
On Tue, Mar 21, 2017 at 01:08:40PM -0400, Brian Wrenn wrote:
quoted
I've tried to find a way to use ::std::thread or ::boost::thread to
accomplish what the article for creating a simple RT application with
pthreads does, but unfortunately I don't think those two OOP
approaches provide enough attribute configuration to suffice.  Has
anyone else found otherwise?
There is a defined member function for the std::thread type,
native_thread() which will return the underlying native thread type,
which, if you're using gcc/glibc is most likely the pthread_t.

Alternatively, the thread can adjust its own scheduling properties using
pthread_self().

See: http://en.cppreference.com/w/cpp/thread/thread/native_handle

For an example.

   Julia
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help