Re: What's the connection between objects and threads?
On May 19, 8:54 am, "Chris Thomasson" <cris...@comcast.net> wrote:
"Szabolcs Ferenczi" <szabolcs.feren...@gmail.com> wrote in message
news:f99c4d57-48cd-4623-84ee-9503b7a4544a@2g2000hsn.googlegroups.com...
On May 18, 3:23 pm, James Kanze <james.ka...@gmail.com> wrote:
Except that, as Chris has already pointed out, it results in a
race condition. It's a serious design error.
Well, he did not point out anything but claimed something. He has
postings that he used to correct the next hour or the next day.
The pseudo-code I post over on 'comp.programming.threads' is all about the=
__experimental__ synchronization algorihtms that I am brainstorming. We ha=
ve
been over this before Szabolcs. If I come up with an idea, I try to make
sure to post it on c.p.t. If there is a typo in the pseudo-code, I promptl=
y
document them and show the corrections. Anyway...
You better read carefully what I have written. I highlighted that one
needs discipline for it. It is hopless for you but at least you calm
down.
I hope I could help though.
Unfortunately, wrt this thread, your so-called help is only going to lead
the OP down the wrong path. You don't seem to get it. AFAICT, the OP wante=
d
to create a thread base class for users to derive from. Something like:
____________________________________________________________________
class thread_base {
pthread_t m_tid;
virtual void on_entry() = 0;
thread_base() {
}
virtual ~thread_base() throw() = 0;
};
thread_base::~thread_base() throw() {}
____________________________________________________________________
The OP cannot start the thread from the constructor of the base class! Thi=
s
is what I was referring to. When threads are involved there is a major
race-condition because the thread can be started and call the on_entry pur=
e
virtual function which results in UB. Also, even in the absence of threads=
there still can be a problem. Here is a VERY simple example:
____________________________________________________________________
#include <cstdio>
#include <cstdlib>
static void call_abstract_virtual_indirect(class base*);
class base {
friend void call_abstract_virtual_indirect(class base*);
virtual void on_action() = 0;
public:
base() {
call_abstract_virtual_indirect(this);
}
virtual ~base() throw() = 0;
};
base::~base() throw() {}
void call_abstract_virtual_indirect(base* _this) {
_this->on_action();
}
class derived : public base {
int const m_ctor;
public:
derived() : m_ctor(123456789) {
}
private:
void on_action() {
std::printf("(%p)::derived::on_action()\n", (void*)this);
if (m_ctor != 123456789) {
std::printf("(%p)::derived::on_action() - NOT CONSTRUCTED!\n",=
(void*)this);
std::getchar();
std::abort();
}
}
};
int main() {
{
derived d;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
std::puts("\n\n____________________________________________\n\
Press <ENTER> to exit...");
std::getchar();
return 0;
}
____________________________________________________________________
The above demonstrates ...
Well, the above demonstrates that a hacker can misuse any formal
system.
Kurt Goedel can be very pleased now up there since slaves are working
for him down here.
Congratulations!
Best Regards,
Szabolcs