Improve logging with multiple threads and processes.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1165450 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4f1cd537bc
commit
a44b60593a
3 changed files with 47 additions and 23 deletions
sca-cpp/trunk/kernel
|
@ -29,6 +29,11 @@
|
|||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
#ifdef WANT_THREADS
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#include "string.hpp"
|
||||
#include "stream.hpp"
|
||||
|
||||
|
@ -149,10 +154,14 @@ ifstream cin(stdin);
|
|||
* Format the current time.
|
||||
*/
|
||||
const string logTime() {
|
||||
const time_t t = ::time(NULL);
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
const time_t t = tv.tv_sec;
|
||||
const tm* lt = localtime(&t);
|
||||
char ft[32];
|
||||
strftime(ft, 31, "%a %b %d %H:%M:%S %Y", lt);
|
||||
strftime(ft, 20, "%a %b %d %H:%M:%S", lt);
|
||||
sprintf(ft + 19, ".%06lu ", (unsigned long)tv.tv_usec);
|
||||
strftime(ft + 27, 5, "%Y", lt);
|
||||
return ft;
|
||||
}
|
||||
|
||||
|
@ -203,11 +212,19 @@ private:
|
|||
bool owner;
|
||||
bool head;
|
||||
|
||||
const unsigned long tid() const {
|
||||
#ifdef WANT_THREADS
|
||||
return (unsigned long)pthread_self();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
logfstream& whead() {
|
||||
if (head)
|
||||
return *this;
|
||||
head = true;
|
||||
*this << "[" << logTime() << "] [" << type << "] ";
|
||||
*this << "[" << logTime() << "] [" << type << "] [pid " << (unsigned long)getpid() << ":tid " << tid() << "] ";
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -136,15 +136,15 @@ bool checkSquareResults(const list<future<int> > r, int i) {
|
|||
return true;
|
||||
}
|
||||
|
||||
const gc_ptr<long int> tlsvc() {
|
||||
gc_ptr<long int> i = new (gc_new<long int>()) long int();
|
||||
const gc_ptr<unsigned long> tlsvc() {
|
||||
gc_ptr<unsigned long> i = new (gc_new<unsigned long>()) unsigned long();
|
||||
*i = 0l;
|
||||
return i;
|
||||
}
|
||||
const perthread_ptr<long int> tlsv(tlsvc);
|
||||
const perthread_ptr<unsigned long> tlsv(tlsvc);
|
||||
|
||||
const long int tlsset(gc_ptr<wqueue<bool>> wq, gc_ptr<wqueue<bool>> xq) {
|
||||
const long int v = *tlsv;
|
||||
const unsigned long v = *tlsv;
|
||||
*tlsv = threadId();
|
||||
enqueue(*xq, true);
|
||||
dequeue(*wq);
|
||||
|
@ -183,8 +183,7 @@ bool checkTLSSets(const list<future<long int> > s) {
|
|||
if (isNil(s))
|
||||
return true;
|
||||
assert(car(s) == 0);
|
||||
checkTLSSets(cdr(s));
|
||||
return true;
|
||||
return checkTLSSets(cdr(s));
|
||||
}
|
||||
|
||||
const list<future<bool> > submitTLSChecks(worker& w, wqueue<bool>& wq, wqueue<bool>& xq, const int max, const int i) {
|
||||
|
@ -198,23 +197,21 @@ bool checkTLSResults(const list<future<bool> > r) {
|
|||
if (isNil(r))
|
||||
return true;
|
||||
assert(car(r) == true);
|
||||
checkTLSResults(cdr(r));
|
||||
return true;
|
||||
return checkTLSResults(cdr(r));
|
||||
}
|
||||
|
||||
bool testWorker() {
|
||||
worker w(20);
|
||||
const int max = 100;
|
||||
worker w(max);
|
||||
{
|
||||
const lambda<int()> func = curry(lambda<int(const int)> (mtsquare), 2);
|
||||
assert(submit(w, func) == 4);
|
||||
}
|
||||
{
|
||||
const int max = 20;
|
||||
const list<future<int> > r(submitSquares(w, max, 0));
|
||||
checkSquareResults(r, 0);
|
||||
}
|
||||
{
|
||||
const int max = 20;
|
||||
wqueue<bool> wq(max);
|
||||
unblockWorkers(wq, max);
|
||||
waitForWorkers(wq, max);
|
||||
|
@ -222,7 +219,6 @@ bool testWorker() {
|
|||
waitForWorkers(wq, max);
|
||||
}
|
||||
{
|
||||
const int max = 20;
|
||||
wqueue<bool> wq(max);
|
||||
wqueue<bool> xq(max);
|
||||
const list<future<long int> > s(submitTLSSets(w, wq, xq, max, 0));
|
||||
|
|
|
@ -26,10 +26,9 @@
|
|||
* Simple parallel work execution functions.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#ifdef WANT_THREADS
|
||||
#include <pthread.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "function.hpp"
|
||||
|
@ -37,17 +36,20 @@
|
|||
|
||||
namespace tuscany {
|
||||
|
||||
/**
|
||||
* Returns the current process id.
|
||||
*/
|
||||
unsigned long processId() {
|
||||
return (unsigned long)getpid();
|
||||
}
|
||||
|
||||
#ifdef WANT_THREADS
|
||||
|
||||
/**
|
||||
* Returns the current thread id.
|
||||
*/
|
||||
long int threadId() {
|
||||
#ifdef IS_DARWIN
|
||||
return syscall(SYS_thread_selfid);
|
||||
#else
|
||||
return syscall(SYS_gettid);
|
||||
#endif
|
||||
unsigned long threadId() {
|
||||
return (unsigned long)pthread_self();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -317,6 +319,15 @@ const bool cancel(worker& w) {
|
|||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/**
|
||||
* Returns the current thread id.
|
||||
*/
|
||||
unsigned long threadId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue