HP aC++/HP C A.06.28 Programmer's Guide Integrity servers (769150-001, March 2014)
void* foo(void*) {
pA = new A();
B ob;
pthread_cleanup_push(reinterpret_cast<fp*>(thread_specific_destroy),pA);
pthread_cleanup_pop(1);
ob.~B(); // potential problem when the thread is canceled.
pthread_exit(0);
return 0;
}
int main() {
//A oa; exit(0);
//dtor for oa won’t be called if line above is uncommented.
pthread_t thread_id;
for (int i = 0; i < 3; i++)
pthread_create(&thread_id, 0, &foo, 0);
pthread_join(thread_id, 0);
}
NOTE: vector::clear does not free all of the memory. The storage is put back into a free
pool for that one container.
This does not happen if a thread is canceled. In such cases, use thread specific data or thread
local storage support along with pthread_cleanup_[push|pop] utilities.
pthread_cancel is not supported.
Function Scoping
Theset_terminate, set_unexpected, and set_new_handler, functions apply to all threads
in the process. For information on specific functions, refer to the appropriate library documentation.
Performance Options
You can use the-D__HPACC_FIXED_REFCNT_MUTEX flag to reduce the amount of space used
for string mutexes and thereby increase performance when using either -AA or -AP strings. Instead
of having one mutex per string, there will be a fixed array of mutexes shared among all strings.
This feature requires C++ runtime version A.05.61 or newer. For additional information refer to
the -mt option.
The number of string mutexes defaults to 64 and can be configured by:
export aCC_MUTEX_ARRAY_SIZE=##
You can mix code compiled with and without -D__HPACC_FIXED_REFCNT_MUTEX.
Parallel Programming Using OpenMP
OpenMP is an industry-standard parallel programming model that implements a fork-join model
of parallel execution. The HP C++ OpenMP pragmas are based on the OpenMP Standard for
C/C++, version 2.5.
To view the details about the standard and details about usage, syntax and values, please go to
http://www.openmp.org/drupal/node/view/8.
OpenMP Implementation
This section summarizes some of the OpenMP directives behavior that are described as
implementation-dependent in the OpenMP v2.5 API. Each behavior is cross-referenced back to its
description in the OpenMP v2.5 main specification. HP, in conformance with the OpenMP v2.5
API, define and document the following behavior.
• Due to resource constraints, it is not possible for an implementation to document the maximum
number of threads that can be created successfully during a program’s execution. This number
is dependent upon the load on the system, the amount of memory allocated by the program,
and the amount of implementation dependent stack space allocated to each thread. For a 32
Function Scoping 167