From: Paulo M. <pm...@us...> - 2008-04-14 12:32:59
|
Update of /cvsroot/xsb/XSB/syslib In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31209/XSB/syslib Modified Files: thread.P Log Message: Corrected some code formatting problems (mostly due to a bad mix of tabs and spaces). Needs more work as the layout in some predicate clauses makes them hard to read. Index: thread.P =================================================================== RCS file: /cvsroot/xsb/XSB/syslib/thread.P,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- thread.P 4 Apr 2008 16:27:18 -0000 1.36 +++ thread.P 14 Apr 2008 12:32:57 -0000 1.37 @@ -1,4 +1,4 @@ -/* File: thread.P +/* File: thread.P ** Author(s): Rui Marques ** Contact: xsb...@cs... ** @@ -43,36 +43,36 @@ rather than weaving back and forth. */ -thread_create( Goal, ThreadId , Options) :- +thread_create(Goal, ThreadId , Options) :- % check_callable(Goal,thread_create/2,1), % check_var(ThreadId,thread_create/2,2), check_options_list(Options,GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,ExitHandler), transform_goal(ExitHandler,Goal,NewGoal), (Alias == [] -> - thread_request( XSB_THREAD_CREATE_PARAMS, NewGoal, ThreadId, - GLSize,TCSize,ComplSize,PDLSize,Detached,0) + thread_request( XSB_THREAD_CREATE_PARAMS, NewGoal, ThreadId, + GLSize,TCSize,ComplSize,PDLSize,Detached,0) ; thread_request( XSB_THREAD_SETUP, _Goal, ThreadId, - GLSize,TCSize,ComplSize,PDLSize,Detached,Pos), - add_aliases_flag_error(Alias,THREAD_ALIAS,ThreadId,Flag), - (Flag == 1 -> + GLSize,TCSize,ComplSize,PDLSize,Detached,Pos), + add_aliases_flag_error(Alias,THREAD_ALIAS,ThreadId,Flag), + (Flag == 1 -> thread_request( XSB_RECLAIM_THREAD_SETUP, ThreadId,_,_,_,_,_,_,_), permission_error(create,alias,Alias,thread_create/3) - ; + ; thread_request( XSB_THREAD_CREATE_ALIAS, NewGoal, _ThreadId, - GLSize,TCSize,ComplSize,PDLSize,Detached,Pos) ) ). + GLSize,TCSize,ComplSize,PDLSize,Detached,Pos) ) ). -check_options_list(Options,GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,ExitHandler):- +check_options_list(Options,GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,ExitHandler) :- check_nonvar(Options,thread_create/3,3), check_options_list_1(Options,GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,ExitHandler). -check_options_list_1([],GLSize,TCSize,ComplSize,PDLSize,Detached,[],Handler):- !, +check_options_list_1([],GLSize,TCSize,ComplSize,PDLSize,Detached,[],Handler) :- !, (var(GLSize) -> GLSize = 0 ; true), (var(TCSize) -> TCSize = 0 ; true), (var(ComplSize) -> ComplSize = 0 ; true), (var(PDLSize) -> PDLSize = 0 ; true), (var(Detached) -> Detached = 0 ; true), (var(Handler) -> Handler = '_$no_handler' ; true). -check_options_list_1([Option|Rest],GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,Handler):- !, +check_options_list_1([Option|Rest],GLSize,TCSize,ComplSize,PDLSize,Detached,Alias,Handler) :- !, check_nonvar(Option,thread_create/3,3), ( Option @= glsize(_) -> Option = glsize(N),set_thread_create_arg(N,GLSize,glsize), Alias = R ; Option @= tcsize(_) -> Option = tcpsize(N),set_thread_create_arg(N,TCSize,tcsize), Alias = R @@ -85,58 +85,62 @@ ; domain_error(thread_option,Option,thread_create/3,3,'') ), check_options_list_1(Rest,GLSize,TCSize,ComplSize,PDLSize,Detached,R,Handler). -check_options_list_1(Culprit,_GLSize,_TCSize,_ComplSize,_PDLSize,_Detached,_Alias,_Handler):- +check_options_list_1(Culprit,_GLSize,_TCSize,_ComplSize,_PDLSize,_Detached,_Alias,_Handler) :- type_error(list,Culprit,thread_create/3,3). -transform_goal('_$no_handler',Goal,Goal):-!. -transform_goal(Handler,Goal,thread_call(Goal,Handler)):-!. +transform_goal('_$no_handler', Goal, Goal) :-!. +transform_goal(Handler, Goal, thread_call(Goal,Handler)) :-!. -set_thread_create_arg(Option,Arg,OptionName):- +set_thread_create_arg(Option, Arg, OptionName) :- (\+ (Option = Arg) -> - misc_error(('Conflicting options in thread_create/3: ', - OptionName,' set to ',Arg,' and ',Option)) - ; Arg = Option). + misc_error(('Conflicting options in thread_create/3: ', + OptionName,' set to ',Arg,' and ',Option)) + ; Arg = Option). /*---------------*/ - -thread_create( Goal, ThreadId ) :- + +thread_create(Goal, ThreadId) :- % check_callable(Goal,thread_create/2,1), % check_var(ThreadId,thread_create/2,2), thread_request( XSB_THREAD_CREATE_FLAGS, Goal, ThreadId, 0,0,0,0,0,0). /*---------------*/ -thread_create( Goal ) :- - thread_create( Goal, _, [detached(true)] ). +thread_create(Goal) :- + thread_create(Goal, _, [detached(true)]). /*---------------*/ -thread_exit(Term):- +thread_exit(Term) :- throw(thread_exit(Term)). /* Upon user-called exit, If thread is detached and aliased, remove aliases. if thread is joinable, assert an exit term; if thread is detached and non-aliased, no special action is necessary */ -thread_exit_handler(ExitTerm):- +thread_exit_handler(ExitTerm) :- thread_request( XSB_CHECK_ALIASES_ON_EXIT,AliasedDetached,Detached,_,_,_,_,_,_), - (AliasedDetached == 1 -> - remove_alias(_Alias,THREAD_ALIAS,Id) - ; (Detached == 0 -> - thread_self(Id),asserta('_$thread_exit_ball'(Id,exited(ExitTerm))) - ; true) ), + ( AliasedDetached == 1 -> + remove_alias(_Alias,THREAD_ALIAS,Id) + ; ( Detached == 0 -> + thread_self(Id),asserta('_$thread_exit_ball'(Id,exited(ExitTerm))) + ; true + ) + ), thread_request( XSB_THREAD_EXIT,THREAD_EXITED,_, _, _,_,_,_,_). %:- import writeln/1 from standard. -internal_thread_exit(ExitCode):- +internal_thread_exit(ExitCode) :- thread_request( XSB_CHECK_ALIASES_ON_EXIT,AliasedDetached,_,_,_,_,_,_,_), - (AliasedDetached == 1 -> - thread_self(Id),remove_alias(_Alias,THREAD_ALIAS,Id) - ; true), + ( AliasedDetached == 1 -> + thread_self(Id),remove_alias(_Alias,THREAD_ALIAS,Id) + ; true + ), % writeln(thread_exit), thread_request( XSB_THREAD_EXIT, ExitCode,_, _, _,_,_,_,_). -thread_exit :- thread_exit( [] ). +thread_exit :- + thread_exit([]). /*---------------*/ @@ -145,105 +149,120 @@ thread_join(Input, ExitCode) :- % check_var(ExitCode,thread_join/2,2), (var(Input) -> - instantiation_error(thread_join/2,1,ground) + instantiation_error(thread_join/2,1,ground) ; (integer(Input) -> - thread_join_1(Input,ExitCode) - ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> - thread_join_1(Tid,ExitCode) - ; (Input = [Id|Rest] -> - thread_join_1(Id,Return), - ExitCode = [Return|ERest], - thread_join(Rest, ERest) - ; (Input = [] -> - ExitCode = [] - ; domain_error(listof(thread_or_alias),Input,thread_join/1,2,'') - ) ) ) ) ). - -thread_join_1(Input,Return):- - thread_request( XSB_THREAD_JOIN,Input,Exit,Aliased,_,_,_,_ ,_), - (Aliased == 1 -> remove_alias(_Alias,THREAD_ALIAS,Id) ; true), - (Exit == THREAD_SUCCEEDED -> Return = true ; - Exit == THREAD_FAILED -> Return = false ; - '_$thread_exit_ball'(Id,Return), - retractall('_$thread_exit_ball'(Id,_)) ). + thread_join_1(Input,ExitCode) + ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> + thread_join_1(Tid,ExitCode) + ; (Input = [Id|Rest] -> + thread_join_1(Id,Return), + ExitCode = [Return|ERest], + thread_join(Rest, ERest) + ; (Input = [] -> + ExitCode = [] + ; domain_error(listof(thread_or_alias),Input,thread_join/1,2,'') + ) ) ) ) ). + +thread_join_1(Input, Return) :- + thread_request( XSB_THREAD_JOIN,Input,Exit,Aliased,_,_,_,_ ,_), + ( Aliased == 1 -> + remove_alias(_Alias,THREAD_ALIAS,Id) + ; true + ), + ( Exit == THREAD_SUCCEEDED -> + Return = true + ; Exit == THREAD_FAILED -> + Return = false + ; '_$thread_exit_ball'(Id,Return), + retractall('_$thread_exit_ball'(Id,_)) + ). -thread_join( ThreadId ) :- thread_join( ThreadId, _). +thread_join(ThreadId) :- + thread_join(ThreadId, _). /*---------------*/ -thread_self( ThreadId ) :- +thread_self(ThreadId) :- % check_var(ThreadId,thread_self/1,1), thread_request( XSB_THREAD_SELF, Tid, _, _, _, _, _, _ ,_), - (atom(ThreadId) -> - get_alias(ThreadId,THREAD_ALIAS,Tid) - ; Tid = ThreadId). + ( atom(ThreadId) -> + get_alias(ThreadId,THREAD_ALIAS,Tid) + ; Tid = ThreadId + ). /*---------------*/ thread_detach(ThreadAlias) :- (var(ThreadAlias) -> - instantiation_error(thread_detach/1,1,ground) - ; (integer(ThreadAlias) -> - thread_detach_1(ThreadAlias) - ; (atom(ThreadAlias) -> - (get_alias(ThreadAlias,THREAD_ALIAS,Tid) -> - thread_detach_1(Tid) - ; domain_error(thread_or_alias,ThreadAlias,thread_detach/1,1,'') - ; domain_error(thread_or_alias,ThreadAlias,thread_detach/1,1,'') ) ) ) ). + instantiation_error(thread_detach/1,1,ground) + ; (integer(ThreadAlias) -> + thread_detach_1(ThreadAlias) + ; (atom(ThreadAlias) -> + (get_alias(ThreadAlias,THREAD_ALIAS,Tid) -> + thread_detach_1(Tid) + ; domain_error(thread_or_alias,ThreadAlias,thread_detach/1,1,'') + ; domain_error(thread_or_alias,ThreadAlias,thread_detach/1,1,'') ) ) ) ). -thread_detach_1(ThreadId):- +thread_detach_1(ThreadId) :- thread_request(XSB_THREAD_DETACH,ThreadId,NeedsAliasRetract,NeedsExitBallRetract,_,_,_,_,_), - (NeedsAliasRetract == 0 -> - true - ; remove_alias(_Alias,THREAD_ALIAS,ThreadId) ), - (NeedsExitBallRetract == 0 -> - true - ; retractall('_$thread_exit_ball'(ThreadId,_)) ). + ( NeedsAliasRetract == 0 -> + true + ; remove_alias(_Alias,THREAD_ALIAS,ThreadId) + ), + ( NeedsExitBallRetract == 0 -> + true + ; retractall('_$thread_exit_ball'(ThreadId,_)) + ). /*---------------*/ -thread_property(Input,Property) :- +thread_property(Input, Property) :- (var(Input) -> - var_thread_property(Input,Property) + var_thread_property(Input,Property) ; (integer(Input) -> - Tid = Input - ; - (atom(Input) -> - get_alias(Input,THREAD_ALIAS,Tid) - ; domain_error(listof(thread_or_alias),Input,thread_property/2,1,'') ) ), - thread_property_1(Tid, Property) ). - -var_thread_property(ThrOrAl,Property):- - thread_request( XSB_FIRST_THREAD_PROPERTY, Old,Detchd, Status, Next, _, _, _, _ ), - var_thread_property_1(Old,Detchd,Status,Next,ThrOrAl,Property). - -var_thread_property_1(Tid,Detached,_Status,_Next,Tid,detached(Boolean)):- - (Detached == 1 -> Boolean = true ; Boolean = false). -var_thread_property_1(Tid,_Detached,StatusNum,_Next,Tid,status(Status)):- + Tid = Input + ; + (atom(Input) -> + get_alias(Input,THREAD_ALIAS,Tid) + ; domain_error(listof(thread_or_alias),Input,thread_property/2,1,'') ) ), + thread_property_1(Tid, Property) ). + +var_thread_property(ThrOrAl,Property) :- + thread_request( XSB_FIRST_THREAD_PROPERTY, Old,Detchd, Status, Next, _, _, _, _ ), + var_thread_property_1(Old,Detchd,Status,Next,ThrOrAl,Property). + +var_thread_property_1(Tid,Detached,_Status,_Next,Tid,detached(Boolean)) :- + (Detached == 1 -> Boolean = true ; Boolean = false). +var_thread_property_1(Tid,_Detached,StatusNum,_Next,Tid,status(Status)) :- convert_status(StatusNum,Tid,Status). var_thread_property_1(Tid, _Detached,_Status,_Next,Tid,alias(Alias)) :- - get_alias(Alias, THREAD_ALIAS, Tid). -var_thread_property_1(_Old,_OldDet,_OldStat,Next,ThrOrAl,Property):- - Next > 0, - thread_request( XSB_NEXT_THREAD_PROPERTY, Next,Detached,Status, NextNew, _, _, _, _), - var_thread_property_1(Next,Detached,Status,NextNew,ThrOrAl,Property). - + get_alias(Alias, THREAD_ALIAS, Tid). +var_thread_property_1(_Old,_OldDet,_OldStat,Next,ThrOrAl,Property) :- + Next > 0, + thread_request( XSB_NEXT_THREAD_PROPERTY, Next,Detached,Status, NextNew, _, _, _, _), + var_thread_property_1(Next,Detached,Status,NextNew,ThrOrAl,Property). + convert_status(THREAD_RUNNING,_,running). -convert_status(THREAD_EXITED,Tid,exited(Term)):- +convert_status(THREAD_EXITED,Tid,exited(Term)) :- '_$thread_exit_ball'(Tid,exited(Term)). -convert_status(THREAD_EXCEPTION,Tid,exception(E)):- +convert_status(THREAD_EXCEPTION,Tid,exception(E)) :- '_$thread_exit_ball'(Tid,exception(E)). convert_status(THREAD_CANCELLED,_,cancelled). convert_status(THREAD_SUCCEEDED,_,true). convert_status(THREAD_FAILED,_,false). thread_property_1(Tid, Prop) :- - thread_request(XSB_THREAD_PROPERTY, Tid, Detached,StatusNum, _, _, _, _,_), - ( (Detached == 1 -> Prop = detached(true) ; Prop = detached(false)) - ; convert_status(StatusNum, Tid, Status),Prop = status(Status) ). + thread_request(XSB_THREAD_PROPERTY, Tid, Detached,StatusNum, _, _, _, _,_), + ( ( Detached == 1 -> + Prop = detached(true) + ; Prop = detached(false) + ) + ; convert_status(StatusNum, Tid, Status), + Prop = status(Status) + ). thread_property_1(Tid, alias(Alias)) :- - get_alias(Alias, THREAD_ALIAS, Tid). + get_alias(Alias, THREAD_ALIAS, Tid). /*---------------*/ @@ -254,30 +273,31 @@ % The convention is that the main thread is always 0 thread_cancel(Input) :- (var(Input) -> - instantiation_error(thread_cancel/1,1,ground) + instantiation_error(thread_cancel/1,1,ground) ; (integer(Input) -> - (Input == 0 -> permission_error(cancel,main_thread,0,thread_cancel/1) ; true), - thread_signal_1(Input,abort_on_thread_cancel) - ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> - (Tid == 0 -> permission_error(cancel,main_thread,0,thread_cancel/1) ; true), - thread_signal_1(Tid,abort_on_thread_cancel) - ; domain_error(thread_or_alias,Input,thread_cancel/1,1,'') - ) ) ). + (Input == 0 -> permission_error(cancel,main_thread,0,thread_cancel/1) ; true), + thread_signal_1(Input,abort_on_thread_cancel) + ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> + (Tid == 0 -> permission_error(cancel,main_thread,0,thread_cancel/1) ; true), + thread_signal_1(Tid,abort_on_thread_cancel) + ; domain_error(thread_or_alias,Input,thread_cancel/1,1,'') + ) ) ). thread_signal(Input,Message) :- (var(Input) -> - instantiation_error(thread_signal/2,1,ground) + instantiation_error(thread_signal/2,1,ground) ; (integer(Input) -> - thread_signal_1(Input,Message) - ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> - thread_signal_1(Tid,Message) - ; domain_error(thread_or_alias,Input,thread_signal/2,1,'') - ) ) ). + thread_signal_1(Input,Message) + ; (atom(Input),get_alias(Input,THREAD_ALIAS,Tid) -> + thread_signal_1(Tid,Message) + ; domain_error(thread_or_alias,Input,thread_signal/2,1,'') + ) ) ). % Sending signals (and cancel) in signal queue, rather than private message queue. :- import thread_send_message/2 from mutex_xsb. :- import xsb_flag/2 from curr_sym. -thread_signal_1(Id,Message):- + +thread_signal_1(Id,Message) :- xsb_flag(max_threads,Max), NewId is Id + Max, thread_send_message(NewId,Message), @@ -291,29 +311,30 @@ /*---------------*/ -thread_yield:- +thread_yield :- thread_request( XSB_THREAD_YIELD, _,_,_, _, _, _, _,_). /*---------------*/ -abolish_private_tables:- +abolish_private_tables :- thread_request( ABOLISH_PRIVATE_TABLES, _,_,_, _, _, _, _,_). -abolish_all_private_tables:- +abolish_all_private_tables :- thread_request( ABOLISH_ALL_PRIVATE_TABLES, _,_,_, _, _, _, _,_). /*---------------*/ -abolish_shared_tables:- +abolish_shared_tables :- thread_request( ABOLISH_SHARED_TABLES, _,_,_, _, _, _, _,_). -abolish_all_shared_tables:- +abolish_all_shared_tables :- thread_request( ABOLISH_ALL_SHARED_TABLES, _,_,_, _, _, _, _,_). -set_xsb_ready:- +set_xsb_ready :- thread_request( SET_XSB_READY, _,_,_, _, _, _, _,_). -usleep(X):- thread_request( XSB_USLEEP, X,_,_, _, _, _, _,_). +usleep(X) :- + thread_request( XSB_USLEEP, X,_,_, _, _, _, _,_). thread_sleep(Seconds) :- Microseconds is Seconds * 1000000, @@ -343,7 +364,7 @@ /* ================================================================== */ -/* Routines used internally. */ +/* Routines used internally. */ thread_run0(Goal) :- thread_enable_cancel, @@ -352,15 +373,14 @@ /* called by xsb_thread_run() in thread_xsb.c */ '_$thread_run'( Goal ) :- - (catch( thread_run0(Goal), Ball, handle_thread_error(Ball)) - ; - internal_thread_exit(THREAD_FAILED) + ( catch( thread_run0(Goal), Ball, handle_thread_error(Ball)) + ; internal_thread_exit(THREAD_FAILED) ). -handle_thread_error(thread_exit(Term)):- +handle_thread_error(thread_exit(Term)) :- thread_exit_handler(Term), - !. % cut should be unnecessary, as thread should have exited by here -handle_thread_error(Ball):- + !. % cut should be unnecessary, as thread should have exited by here +handle_thread_error(Ball) :- default_error_handler(Ball). /* This routine is called when a thread is created with the @@ -369,11 +389,14 @@ even when choicepoints have been left around. */ -thread_call(Goal,Handler):- - catch(Goal,Ball,thread_call_handler(Ball,Handler)),call(Handler). -thread_call(_Goal,Handler):- call(Handler),fail. +thread_call(Goal, Handler) :- + catch(Goal,Ball,thread_call_handler(Ball,Handler)), + call(Handler). +thread_call(_Goal,Handler) :- + call(Handler), + fail. -thread_call_handler(Ball,Handler):- +thread_call_handler(Ball, Handler) :- call(Handler), throw(Ball). @@ -381,11 +404,11 @@ :- init_multi_threading. -init_multi_threading:- +init_multi_threading :- term_psc('_$thread_run'(_), PSC), stat_set_flag(THREAD_RUN, PSC). -xsb_show_mutexes:- +xsb_show_mutexes :- thread_request( XSB_SHOW_MUTEXES, _,_,_, _,_,_,_,_). xsb_sys_mutex_lock(Id) :- @@ -395,24 +418,24 @@ /* ================================================================== */ /* Obsolescent, but may still be used in parts of the system. */ -xsb_thread_create(One,Two,Three):- thread_create(One,Two,Three). -xsb_thread_create(One,Two):- thread_create(One,Two). +xsb_thread_create(One,Two,Three) :- thread_create(One,Two,Three). +xsb_thread_create(One,Two) :- thread_create(One,Two). -xsb_thread_cancel(Id):- thread_cancel(Id). +xsb_thread_cancel(Id) :- thread_cancel(Id). -xsb_thread_detach(ThreadId):- thread_detach(ThreadId). +xsb_thread_detach(ThreadId) :- thread_detach(ThreadId). -xsb_thread_exit(ExitCode):- thread_exit(ExitCode). -xsb_thread_exit:- thread_exit. +xsb_thread_exit(ExitCode) :- thread_exit(ExitCode). +xsb_thread_exit :- thread_exit. xsb_thread_join(Input, ExitCode) :- thread_join(Input, ExitCode). xsb_thread_join(Input) :- thread_join(Input). -xsb_thread_property(Id,Property) :- thread_property(Id,Property). +xsb_thread_property(Id, Property) :- thread_property(Id, Property). -xsb_thread_self(ThreadId):- thread_self(ThreadId). +xsb_thread_self(ThreadId) :- thread_self(ThreadId). -xsb_thread_yield:- thread_yield. +xsb_thread_yield :- thread_yield. /**************************************************************/ /** Higher level stuff (Rui) **/ @@ -462,7 +485,7 @@ % N1 >= MUTEX_USER1, % N1 < MAX_SYS_MUTEXES -> % true -% ; domain_error(user_mutex,N,Call,1,'') ). +% ; domain_error(user_mutex,N,Call,1,'') ). % xsb_user_mutex_lock(N) :- % user_mutex(N,N1,xsb_user_mutex_unlock/1), |