Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
HP.com home

HP OpenVMS Systems

Ask the Wizard
» 

HP OpenVMS Systems

OpenVMS information

» What's new on our site
» Upcoming events
» Configuration and buying assistance
» Send us your comments

HP OpenVMS systems

» OpenVMS software
» Supported Servers
» OpenVMS virtualization
» OpenVMS solutions and partners
» OpenVMS success stories
» OpenVMS service and support
» OpenVMS resources and information
» OpenVMS documentation
» Education and training

Quick Links

» Non-javascript page
» Ask the Wizard
» OpenVMS FAQ

Test Drive OpenVMS

» OpenVMS I64 test drive
» Java test drive

Other information resources available to you include:

» OpenVMS freeware
» ECO kits, software and hardware support, prior version support
» Alpha SRM, ARC, and AlphaBIOS firmware updates
» ENCOMPASS - HP user group
» OpenVMS software downloads, OpenVMS freeware CD-ROM
» OpenVMS firmware locations
» DECconnect passive adaptor charts
» Cables reference guide
» MicroVAX console commands
» OpenVMS student research

Select a topic below to see Questions Frequently Asked by partners

» Using the online documentation library(installing BNU from the asap SDK)
» Global sections(how to create and use.)
» xx$CREATE_BUFOBJ system service(usage)
» Ethernet address(methods of determination)
» Shareable images(cookbook approach to creating one)
» Sharing data/code at absolute addresses(a guide with examples)
» Determining the Alpha microprocessor
» Using GETSYI to get hardware status

Evolving business value

» Business Systems Evolution
» AlphaServer systems transition planning
» Alpha RetainTrust program

Related links

» HP Integrity servers
» HP Alpha systems
» HP storage
» HP software
» HP products and services
» HP solutions
» HP support
disaster proof
HP Integrity server animation
HP Integrity server animation
Content starts here

Ask the Wizard Questions

C program debugging

The Question is:

Why does the following C program that uses pthreads only
work if I define the mutex to be a fast mutex.  In this
particular case, if I use a nonrecursive mutex, the mutex
unlock routine returns a status of -1.  Any ideas?
==========================================================

#include 
#include 
#include 

static void mutex_init_c(pthread_mutex_t *mutex_handle,
                         int             *status)
{
   pthread_mutexattr_t attribute;

   *status = pthread_mutexattr_create (&attribute);
   *status = pthread_mutexattr_setkind_np (&attribute, MUTEX_NONRECURSIVE_NP);


   if (*status == 0)
   {
      *status =  pthread_mutex_init (mutex_handle, attribute);
   }

   return;
}
static int mutex_lock_c(pthread_mutex_t *mutex_handle)
{
   int status = 0;

   if (status = 0)
   {
      status = pthread_mutex_lock (mutex_handle);
   }

   return(status);
}


static int mutex_unlock_c(pthread_mutex_t *mutex_handle)
{
   int status = 0;

   status = pthread_mutex_unlock (mutex_handle);
   return(status);

}main()
{
   int             status = 0;
   pthread_mutex_t mutex;

   mutex_init_c(&mutex, &status);
   printf("The status for mutex init is : ");
   printf("%d \n",status);

   status = pthread_setasynccancel(CANCEL_OFF);
   status = mutex_lock_c(&mutex);
   printf("The status for mutex lock is : ");
   printf("%d \n",status);

   status = sleep(2);

   status = mutex_unlock_c(&mutex);
   printf("The status for mutex unlock is : ");
   printf("%d \n",status);

}


The Answer is:

>   if (status = 0)
>   {
>      status = pthread_mutex_lock (mutex_handle);
>   }

    pthread_mutex_lock will never be called !

    The code should probably have read 'if (status == 0)'.
    I dont see the point of testing the value of status, as it has just
    been set to 0 anyway.

    I suspect that the mutex_unlock_c will appear to work for a fast mutex as
    very few checks are made for fast mutexes, so it will not be noticed
    that the mutex was not previously locked.


 

Privacy statement Using this site means you accept its terms Feedback to webmaster
© 2012 Hewlett-Packard Development Company, L.P.